23

good.py モジュールを含む hello1 パッケージがあります。

hello1
├── __init__.py
└── good.py

initモジュールには変数A = 1があり、good.py 内の変数 hello1.A にアクセスする必要があります。

import hello1

class Good(object):
    def __init__(self):
        print hello1.A

if __name__ == "__main__":
    g = Good()

問題は、python スクリプトを実行するとImportError: 'No module named hello1'エラーが発生することです。簡単な修正import sys; sys.path.append("..")のために の最初の行に追加できます。good.py

ただ、good.py は __init__.py と同じ hello1 パッケージに入っているので、同じパッケージ内のモジュールから __init__.py の変数にアクセスする方法はないのだろうか。

4

5 に答える 5

1

私が間違っていなければ、あなたは次のようなことをしたいと思っています:

python hello1/good.py

はパッケージのサブモジュールであるためgood.py、直接実行しないでください。直接実行すると、パッケージの一部とは見なされないため、hello1相対インポートが防止され、現在のディレクトリがファイルを含むディレクトリになるためhello1PYTHONPATH. -m代わりに、Python インタープリターのスイッチを使用して実行できます。

-m mod: ライブラリ モジュールをスクリプトとして実行します (オプション リストを終了します)。

個人的には、インタプリタ オプションを使用して Python ファイルを実行するのは好きではありません。good.pyモジュールをインポートし、hello1.goodそれを使用して必要なことを実行する独立したランチャーファイルが必要です。

于 2013-08-16T13:57:37.963 に答える
1

使用する定数を明示的にインポートする必要があります。

すべての定数を「構成」ファイル (つまり、config.py) に入れることをお勧めします)。それらをパッケージの名前空間に入れたい場合は、それらをインポートします。

初期化 .py ファイル:

from package.config import *

その方がわかりやすい

于 2013-08-16T14:08:38.293 に答える
1

sys.path.append(...) が気に入らない場合は、スクリプトを次のように実行できます

python -m hello1.good

「hello1」ディレクトリを含むディレクトリに配置するか、sys.path の代わりに PYTHONPATH 環境変数を使用します。

于 2013-08-16T13:55:04.637 に答える