为了账号安全,请及时绑定邮箱和手机立即绑定

将 Django 部署到 Heroku 时:ModuleNotFoundError:

将 Django 部署到 Heroku 时:ModuleNotFoundError:

MMMHUHU 2023-07-27 16:11:58
将 Django 部署到 Heroku 时,出现错误ModuleNotFoundError: No module named 'dotenv'。但是,我的requirements.txt 中确实列出了python-dotenv。所以我很困惑为什么 Heroku 对 dotenv 不满意。这是我的要求.txt:cffi==1.14.2cryptography==3.1dj-database-url==0.5.0Django==3.1.1django-cors-headers==3.5.0django-heroku==0.3.1django-rest-knox==4.1.0django-simple-email-confirmation==0.70djangorestframework==3.11.1gunicorn==20.0.4psycopg2==2.8.6pycparser==2.20python-dotenv==0.14.0pytz==2020.1six==1.15.0sqlparse==0.3.1whitenoise==5.2.0
查看完整描述

4 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

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

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

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

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

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


查看完整回答
反对 回复 2023-07-27
?
PIPIONE

TA贡献1829条经验 获得超9个赞

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

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

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

  • 你的敏感环境变量不能被别人看到

  • 在生产中,您可能希望能够更改这些变量而无需重新部署

  • 不同的人可以在不同的环境中运行应用程序

因此,当您部署到 Heroku 时,您通常不包含您的.env,因此dotenv无需执行任何操作。

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

这就留下了在代码中做什么的问题,尝试调用dotenvHeroku 会出现您所描述的错误。

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

import os


if not os.environ.get("PRODUCTION"):

    from dotenv import load_dotenv


    load_dotenv()

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


查看完整回答
反对 回复 2023-07-27
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

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



查看完整回答
反对 回复 2023-07-27
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

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



查看完整回答
反对 回复 2023-07-27
  • 4 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信