因为Pycharm不是从终端启动,您的环境将不会被加载。简而言之,任何GUI程序都不会继承SHELL变量。参见
this的原因(假设是Mac)。
然而,这个问题有几个基本的解决方案。如@user3228589所示,您可以将其设置为PyCharm中的变量。这有几个利弊。我个人不喜欢这种方法,因为它不是一个单一的来源。为了解决这个问题,我使用我的settings.py文件的顶部的一个小功能来查找本地.env文件中的变量。我把我所有的“私人”东西放在那里。我也可以在我的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,所以不是真的需要。