运行Django应用程序与在Python中运行主模块时路径之间的差异

时间:2013-06-27 17:02:57

标签: python django

我有一个Django网络应用程序,其目录/文件结构如下:

matrix/
    matrix/
        settings.py
        __init__.py
    view/
        get_matrix.py
        __init__.py
    settings.py
    __init__.py

settings.py(顶级目录中的那个)是一个带有属性的简单单行:

SOME_PROPERTY="FOO"

最后这是get_matrix.py

import settings

def foo_bar_op():
    print settings.PROPERTY

if __name__ == "__main__":
    foo_bar_op()

问题

当我运行网络应用程序时,它运行正常,没有问题。但是,当我单独运行python get_matrix.py时,我收到此错误:

ImportError: No module named settings

当web-app运行时,我查看了sys.path,它包含顶级目录作为第一个条目。这可以解释它是如何找到settings.py

为什么主模块找不到settings.py?是否有两个名为matrix的目录?

1 个答案:

答案 0 :(得分:4)

因为在Django外部运行时,settings.py不在PYTHONPATH上。试试这个:

try:
    import settings
except ImportError,err:
    import sys
    sys.path.append("../")
    import settings


def foo_bar_op():
    print settings.PROPERTY

if __name__ == "__main__":
    foo_bar_op()

这是编写由Django和独立进程共享的代码的常见模式。特别是如果你想在Django之外使用为Django编写的ORM类。然后你也可以为独立脚本提供一个准确的“fake_django_settings.py”。