因为PyCharm不是从终端启动的,所以不会加载您的环境.简而言之,任何GUI程序都不会继承shell变量.有关原因,请参见this(假设是Mac).
然而,对于这个问题有几个基本的解决方案.正如@user3228589发布的那样,您可以将其设置为PyCharm中的一个变量.这有几个利弊.我个人不喜欢这种方法,因为它不是single source
.为了解决这个问题,我在settings.py文件的顶部使用了一个小函数,该函数在本地.env
文件中查找变量.我把我所有的"私有"东西都放进go 了.我也可以在我的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'
最后,您的viralenv/bin/postactivate可以生成此文件.如果愿意,您可以更进一步,按照描述here导出变量,但是因为设置文件直接调用.env,所以实际上没有必要.