簡體   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