1

我有一个 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

我查看sys.path了 web 应用程序运行的时间,它包含顶级目录作为第一个条目。这将解释它是如何发现的settings.py

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

4

1 回答 1

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”。

于 2013-06-27T17:10:01.813 回答