1

次のようなディレクトリ/ファイル構造を持つDjango Webアプリがあります。

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()

問題

Web アプリを実行すると、正常に動作し、問題はありません。ただし、python get_matrix.py単独で実行すると、次のエラーが発生します。

ImportError: No module named settings

Web アプリがいつ実行されるかを調べたsys.pathところ、最上位のディレクトリが最初のエントリとして含まれています。それはそれがどのように見つけているかを説明するでしょうsettings.py

メインモジュールが見つからないのはなぜsettings.pyですか? という名前のディレクトリが 2 つあるのは混乱してい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 に答える