![](/img/trans.png)
[英]Why different behaviors between running Python module as an executable vs. Python [filename]
[英]Discrepancy between path when running Django app vs. running main module in Python
我有一個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
目錄嗎?
因為在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”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.