为什么Python无法读取我的环境变量?

6

我正在使用Django,并尝试设置多个环境变量来定义导入哪些设置。

我使用以下文件夹层次结构:

project_folder>
    app_folder>
    project_specific_files>
        settings>
            base.py
            local.py

我使用Kenneth Reitz的autoenv来加载我的环境变量。我知道它正常工作,因为当我输入$ echo $DJANGO_SETTINGS_MODULE时,可以看到以下输出:
project_specific_files.settings.local

但当我运行$django-admin.py runserver时,出现以下信息:
ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.

此外,如果我进入Python shell并尝试打印出环境变量,我会得到以下结果:
Python 2.7.3 (default, Dec 22 2012, 21:14:12) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> print os.environ['HOME']
/home/marco
>>> print os.environ['DJANGO_SETTINGS_MODULE']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/marco/.virtualenvs/myproject/lib/python2.7/UserDict.py", line 23, in __getitem__
    raise KeyError(key)
KeyError: 'DJANGO_SETTINGS_MODULE'

有人知道可能出了什么问题吗?谢谢!

另外,我可以输入$ django-admin.py runserver --settings='project_specific_files.settings.local',一切都能正常工作0.o


你在每个文件夹里都有 __init__.py 文件吗? - PepperoniPizza
@PepperoniPizza 是的,我只是在项目根目录缺少 init.py 文件,不确定那是否需要。我添加了它来检查一下,但没有起作用。 - marcoamorales
1个回答

11

您的环境变量是否已经导出?

也许环境变量在当前 shell 中已经定义,但没有被标记为导出到子进程(Python 解释器或 Django)。

如果使用 bash,请运行:export DJANGO_SETTINGS_MODULE


是的,这就是问题所在。我想知道为什么autoenv没有导出变量。我认为它只是引用它们。我做错了什么吗? - marcoamorales
6
如果我理解正确,autoenv 只会加载 .env 文件。因此,如果您想要在 .env 文件中定义的变量被导出,那么您需要使用 export 命令!只需将 DJANGO_SETTINGS_MODULE=the_value 改为 export DJANGO_SETTINGS_MODULE=the_value 即可。请注意,这样做不会改变原意,只是使语言更加通俗易懂。 - Didier Trosset

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接