简体   繁体   English

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

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

When deploying Django to Heroku, I get a ModuleNotFoundError: No module named 'dotenv' error.将 Django 部署到 Heroku 时,出现ModuleNotFoundError: No module named 'dotenv'错误。 However, I do have python-dotenv listed in my requirements.txt.但是,我的 requirements.txt 中确实列出了 python-dotenv。 So I'm very confused about why Heroku is not happy about dotenv.所以我很困惑为什么 Heroku 对 dotenv 不满意。

Here is my requirements.txt:这是我的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 的事情

Instead of using python-dotenv try using django-dotenv而不是使用 python-dotenv 尝试使用 django-dotenv

Not sure what imports you have in settings.py but try this:不确定你在 settings.py 中有什么导入,但试试这个:

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

If you tried to import dotenv at the top of your settings file you may need to remove it.如果您尝试在设置文件的顶部导入 dotenv,则可能需要将其删除。

Also remember to add those environment variables in the 'Config Vars' under the settings of your Heroku app.还要记住在 Heroku 应用程序设置下的“配置变量”中添加这些环境变量。 Those should be there before you push to Heroku.在你推送到 Heroku 之前,这些应该已经存在。

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

The purpose of dotenv is to "read key-value pairs from a .env file and set them as environment variables" dotenv的目的是“从 .env 文件中读取键值对并将它们设置为环境变量”

Typically the purpose of having a .env file is to have a convenient way of managing your environment locally.通常,拥有.env文件的目的是提供一种在本地管理环境的便捷方式。

Typically this is not checked into version control (ie it is listed in .gitignore ).通常这不会被检入版本控制(即它列在.gitignore 中)。 The benefits are:好处是:

  • Your sensitive environment variables can not be seen by others别人看不到你的敏感环境变量
  • In production you might want to be able to change these variables without re-deploying在生产中,您可能希望能够在不重新部署的情况下更改这些变量
  • Different people can run the app in different environments不同的人可以在不同的环境中运行应用程序

Therefore when you deploy to Heroku you typically don't include your .env , and so dotenv has nothing to do.因此,当您部署到 Heroku 时,您通常不包含.env ,因此dotenv与此无关。

Instead Heroku has its own way of managing environment variables .相反,Heroku 有自己的管理环境变量的方式

This leaves the problem of what to do in your code where trying to call dotenv on Heroku would give errors like you describe.这留下了在您的代码中尝试调用dotenv在 Heroku 上会出现您描述的错误的问题。

One option is to only load it if the environment is not production.一种选择是仅在环境不是生产环境时才加载它。 Something like this:像这样的东西:

import os

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

    load_dotenv()

Note that you need to set the PRODUCTION environment variable on Heroku, or pick a variable that is already there.请注意,您需要在 Heroku 上设置PRODUCTION环境变量,或者选择一个已经存在的变量。

暂无
暂无

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

相关问题 Django / Heroku 部署 - ModuleNotFoundError:“没有名为 'django' 的模块” - Django / Heroku Deploying - ModuleNotFoundError: "No module named 'django'" 将 Django 部署到 Heroku 时:ModuleNotFoundError: No module named 'env' - When deploying Django to Heroku: ModuleNotFoundError: No module named 'env' ModuleNotFoundError:“没有命名的模块<mymodule> ",从 Django 部署到 Heroku 时</mymodule> - ModuleNotFoundError: "No module named <mymodule>", when deploying to Heroku from Django ModuleNotFoundError:部署到heroku时没有名为“useracc”的模块 - ModuleNotFoundError: No module named 'useracc' When deploying to heroku ModuleNotFoundError:没有名为“dotenv”的模块 - ModuleNotFoundError: No module named 'dotenv' 将 Flask 应用程序部署到 Heroku 时出现“ModuleNotFoundError: No module named 'app'” - Getting "ModuleNotFoundError: No module named 'app'" when deploying Flask app to Heroku ModuleNotFoundError:Heroku中没有名为“ django”的模块 - ModuleNotFoundError: No module named 'django' in Heroku ModuleNotFoundError:没有名为“ gi”的模块-在Heroku中部署时 - ModuleNotFoundError: No module named 'gi' - While deploying in Heroku 在 GCP 上部署 OpenLiteSpeed django 解决方案时出现“ModuleNotFoundError(”No module named 'MySQLdb'“,)” - “ModuleNotFoundError(”No module named 'MySQLdb'“,)” when deploying a OpenLiteSpeed django solution on GCP ModuleNotFoundError:部署到 Elastic Beanstalk 时没有名为“django”的模块 - ModuleNotFoundError: No module named 'django' when deploying to Elastic Beanstalk
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM