Python 将Django部署到Heroku时:ModuleNotFoundError:没有名为'的模块;dotenv';

Python 将Django部署到Heroku时:ModuleNotFoundError:没有名为'的模块;dotenv';,python,django,heroku,dotenv,Python,Django,Heroku,Dotenv,将Django部署到Heroku时,我得到一个ModuleNotFoundError:没有名为'dotenv'的模块error。但是,我的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 d

将Django部署到Heroku时,我得到一个
ModuleNotFoundError:没有名为'dotenv'的模块
error。但是,我的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 install中安装的,一旦我在那里完成了所有安装,它就工作了,我不记得a是否做了类似pipenv freeze>requirements.txt的事情,而不是使用python dotenv尝试使用django dotenv

不确定在settings.py中有哪些导入,但请尝试以下操作:

#settings.py
导入操作系统
SECRET\u KEY=os.getenv('SECRET\u KEY'))
如果试图在设置文件顶部导入dotenv,则可能需要将其删除


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

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

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

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

通常,这不会签入版本控制(即,在中列出)。好处是:

  • 其他人看不到您的敏感环境变量
  • 在生产中,您可能希望能够在不重新部署的情况下更改这些变量
  • 不同的人可以在不同的环境中运行应用程序
因此,当您部署到Heroku时,通常不包括
.env
,因此
dotenv
与此无关

相反,Heroku有自己的优势

这就留下了一个问题,即在Heroku上尝试调用
dotenv
会产生您描述的错误

一种选择是仅在环境不是生产环境时加载它。大概是这样的:

导入操作系统
如果不是操作系统环境获取(“生产”):
从dotenv导入加载\u dotenv
加载_dotenv()

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

您好,欢迎使用SO!请阅读,在问题中,
python dotenv
似乎是需求文件的一部分。您想相应地更新您的答案吗?