Python 如何将环境变量从本地文件导入Django

Python 如何将环境变量从本地文件导入Django,python,django,environment-variables,Python,Django,Environment Variables,我正在为我的第一个专业Django项目的生产做准备,我在保护应用程序的环境变量方面遇到了问题。到目前为止,我已经设法创建了一个本地文件来存储我的电脑上的所有变量 env_variables.py import os db_user = os.environ.get('db_user') db_password = os.environ.get('db_password') # AWS DJANGO export AWS_ACCESS_KEY_ID = "access_key" export

我正在为我的第一个专业Django项目的生产做准备,我在保护应用程序的环境变量方面遇到了问题。到目前为止,我已经设法创建了一个本地文件来存储我的电脑上的所有变量

env_variables.py

import os

db_user = os.environ.get('db_user')
db_password = os.environ.get('db_password')

# AWS DJANGO
export AWS_ACCESS_KEY_ID = "access_key"
export AWS_SECRET_ACCESS_KEY = "secret_key"
export AWS_STORAGE_BUCKET_NAME = "bucket_name"

print(db_user)
print(db_password)
...

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')

...
import environ
env = environ.Env()
env.read_env(env.str('ENV_PATH', '/path/to/.env'))
AWS_ACCESS_KEY_ID = env('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = env('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = env('AWS_STORAGE_BUCKET_NAME')
我使用环境设置(windows)创建用户名和密码。当我运行文件时,它们工作。我正在使用我的AWS凭据来测试这个。我一直认为Django可以访问这些信息,无论它在我本地的pc上的什么位置。如果我错了,请纠正我

设置.py

import os

db_user = os.environ.get('db_user')
db_password = os.environ.get('db_password')

# AWS DJANGO
export AWS_ACCESS_KEY_ID = "access_key"
export AWS_SECRET_ACCESS_KEY = "secret_key"
export AWS_STORAGE_BUCKET_NAME = "bucket_name"

print(db_user)
print(db_password)
...

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')

...
import environ
env = environ.Env()
env.read_env(env.str('ENV_PATH', '/path/to/.env'))
AWS_ACCESS_KEY_ID = env('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = env('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = env('AWS_STORAGE_BUCKET_NAME')
我知道Django没有访问这个文件,因为我的所有媒体文件都有400个,但当我将密钥直接放入settings.py文件时,它就起作用了。我想我错过了一些步骤。我见过其他python程序员能够做到这一点,而不必使用django Enviro或其他软件包。如果有人能帮忙,我将不胜感激,因为我想为我所有的项目都这样做

编辑 我的Procfile的gunicorn是
web:gunicorn project\u name.wsgi
我没有修改我的wsgi文件。

我建议您使用来配置应用程序。 将所有配置值保存在单独的文件中,例如.env——不应将其添加到repo中

.env

AWS_ACCESS_KEY_ID = "access_key"
AWS_SECRET_ACCESS_KEY = "secret_key"
AWS_STORAGE_BUCKET_NAME = "bucket_name"
现在在Djangosettings.py中加载env文件并使用相应的键

设置.py

import os

db_user = os.environ.get('db_user')
db_password = os.environ.get('db_password')

# AWS DJANGO
export AWS_ACCESS_KEY_ID = "access_key"
export AWS_SECRET_ACCESS_KEY = "secret_key"
export AWS_STORAGE_BUCKET_NAME = "bucket_name"

print(db_user)
print(db_password)
...

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')

...
import environ
env = environ.Env()
env.read_env(env.str('ENV_PATH', '/path/to/.env'))
AWS_ACCESS_KEY_ID = env('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = env('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = env('AWS_STORAGE_BUCKET_NAME')

运行该文件可能无法工作,因为它是Python和bash语法的混合体,在这两种语法中都无效。您的settings.py文件可以。正如@DanielRoseman所说的,您是env_variables.py文件没有意义。问题是如何设置环境变量。通常,您会激活一个virtualenv,并使用守护进程在该virtualenv中运行gunicorn或uwsgi,并将这些特定的环境变量设置为您需要的值。e、 g.如果您使用systemd启动gunicorn,您可以在配置文件的
[Service]
部分中传递它的
环境设置。因此,您应该扩展您的问题,了解如何运行Django(gunicorn/uwsgi)以及如何配置它们。当我在终端中运行“python env_vars.py”时,它会打印我的用户名和密码。我在这里混用纪律是偶然的吗?是否需要将所有秘密都放在一个.py文件中?如果没有,则可以使用从.env文件加载环境变量。在manage.py和wsgi.py中添加一个简单的脚本,就可以让它为django工作。如何将它扩展到其他文件,例如
local\u utils.py
-我得到一个
设置环境变量
。我可以从
settings.py
访问它,但不能从(自编)utils函数访问它