gpt4 book ai didi

python - Pycharm:为运行 manage.py 任务设置环境变量

转载 作者:IT老高 更新时间:2023-10-28 21:48:12 32 4
gpt4 key购买 nike

我已将我的 SECRET_KEY 值从我的设置文件中移出,并在我加载我的 virtualenv 时设置。我可以从 python manage.py shell 确认该值存在。

当我运行 Django 控制台时,SECRET_KEY 丢失了,这是应该的。所以在首选项中,我转到 Console>Django Console 并加载 SECRET_KEY 和适当的值。我回到 Django 控制台,SECRET_KEY 就在那里。

正如预期的那样,我还不能运行 manage.py 任务,因为它还没有找到 SECRET_KEY。所以我进入 Run>Edit Configurations 以将 SECRET_KEY 添加到 Django 服务器和 Django 测试中,并添加到项目服务器中。重启 Pycharm,确认按键。

当我运行一个 manage.py 任务时,例如 runserver,我仍然得到 KeyError: 'SECRET_KEY'.

我应该把这把 key 放在哪里?

最佳答案

因为 Pycharm 不是从终端启动,所以不会加载您的环境。简而言之,任何 GUI 程序都不会继承 SHELL 变量。见 this出于某种原因(假设是 Mac)。

但是,有几个基本的解决方案可以解决这个问题。如@user3228589发布后,您可以将其设置为 PyCharm 中的变量。这有几个优点和缺点。我个人不喜欢这种方法,因为它不是单一来源。为了解决这个问题,我在我的 settings.py 文件顶部使用了一个小函数,它在本地 .env 文件中查找变量。我把我所有的“私有(private)”东西都放在那里。我也可以在我的 virtualenv 中引用它。

这是它的样子。

--settings.py

def get_env_variable(var_name, default=False):
"""
Get the environment variable or return exception
:param var_name: Environment Variable to lookup
"""
try:
return os.environ[var_name]
except KeyError:
import StringIO
import ConfigParser
env_file = os.environ.get('PROJECT_ENV_FILE', SITE_ROOT + "/.env")
try:
config = StringIO.StringIO()
config.write("[DATA]\n")
config.write(open(env_file).read())
config.seek(0, os.SEEK_SET)
cp = ConfigParser.ConfigParser()
cp.readfp(config)
value = dict(cp.items('DATA'))[var_name.lower()]
if value.startswith('"') and value.endswith('"'):
value = value[1:-1]
elif value.startswith("'") and value.endswith("'"):
value = value[1:-1]
os.environ.setdefault(var_name, value)
return value
except (KeyError, IOError):
if default is not False:
return default
from django.core.exceptions import ImproperlyConfigured
error_msg = "Either set the env variable '{var}' or place it in your " \
"{env_file} file as '{var} = VALUE'"
raise ImproperlyConfigured(error_msg.format(var=var_name, env_file=env_file))

# Make this unique, and don't share it with anybody.
SECRET_KEY = get_env_variable('SECRET_KEY')

那么 env 文件是这样的:

#!/bin/sh
#
# This should normally be placed in the ${SITE_ROOT}/.env
#
# DEPLOYMENT DO NOT MODIFY THESE..
SECRET_KEY='XXXSECRETKEY'

最后你的 virtualenv/bin/postactivate 可以获取这个文件。您可以进一步导出变量,如 here 所述。如果您愿意,但由于设置文件直接调用 .env,因此没有必要。

关于python - Pycharm:为运行 manage.py 任务设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21538859/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com