![](/img/trans.png)
[英]Django / Heroku Deploying - ModuleNotFoundError: "No module named 'django'"
[英]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.