繁体   English   中英

将 Django 部署到 Heroku 时:ModuleNotFoundError: No module named 'dotenv'

[英]When deploying Django to Heroku: ModuleNotFoundError: No module named 'dotenv'

将 Django 部署到 Heroku 时,出现ModuleNotFoundError: No module named 'dotenv'错误。 但是,我的 requirements.txt 中确实列出了 python-dotenv。 所以我很困惑为什么 Heroku 对 dotenv 不满意。

这是我的requirements.txt:

cffi==1.14.2
cryptography==3.1
dj-database-url==0.5.0
Django==3.1.1
django-cors-headers==3.5.0
django-heroku==0.3.1
django-rest-knox==4.1.0
django-simple-email-confirmation==0.70
djangorestframework==3.11.1
gunicorn==20.0.4
psycopg2==2.8.6
pycparser==2.20
python-dotenv==0.14.0
pytz==2020.1
six==1.15.0
sqlparse==0.3.1
whitenoise==5.2.0

我不知道这是否会有所帮助,但我在部署到 Heroku 时遇到了那个错误,但在我的情况下,我使用的是 pipenv,问题是我所做的要求或任何导入我是在 pip install 而不是 pipenv 中安装它安装,一旦我在那里完成所有安装,它就起作用了,我不记得是否做了类似 pipenv freeze > requirements.txt 的事情

而不是使用 python-dotenv 尝试使用 django-dotenv

不确定你在 settings.py 中有什么导入,但试试这个:

# settings.py
import os
SECRET_KEY = os.getenv('SECRET_KEY')

如果您尝试在设置文件的顶部导入 dotenv,则可能需要将其删除。

还要记住在 Heroku 应用程序设置下的“配置变量”中添加这些环境变量。 在你推送到 Heroku 之前,这些应该已经存在。

尝试卸载软件包并再次下载并检查它是否在requirements.txt 文件中。

dotenv的目的是“从 .env 文件中读取键值对并将它们设置为环境变量”

通常,拥有.env文件的目的是提供一种在本地管理环境的便捷方式。

通常这不会被检入版本控制(即它列在.gitignore 中)。 好处是:

  • 别人看不到你的敏感环境变量
  • 在生产中,您可能希望能够在不重新部署的情况下更改这些变量
  • 不同的人可以在不同的环境中运行应用程序

因此,当您部署到 Heroku 时,您通常不包含.env ,因此dotenv与此无关。

相反,Heroku 有自己的管理环境变量的方式

这留下了在您的代码中尝试调用dotenv在 Heroku 上会出现您描述的错误的问题。

一种选择是仅在环境不是生产环境时才加载它。 像这样的东西:

import os

if not os.environ.get("PRODUCTION"):
    from dotenv import load_dotenv

    load_dotenv()

请注意,您需要在 Heroku 上设置PRODUCTION环境变量,或者选择一个已经存在的变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM