我有一个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
的目录?
答案 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”。