docssys.path
によると、の最初のエントリは現在のスクリプトのディレクトリです。次のセットアップでは、このデフォルトを変更したいと思います。次のディレクトリ構造を想像してください。
src/
core/
stuff/
tools/
tool1.py
tool2.py
gui/
morestuff/
gui.py
スクリプトは、次のようにスクリプトとして実行することを目的としていますtool*.py
。gui.py
python src/core/tools/tool2.py
python src/gui/gui.py
現在、すべてのツールは からインポートされsrc.core.stuff
、GUI には が必要gui.morestuff
です。これは、がsys.path[0]
を指す必要があることを意味しますが、デフォルトではまたはをsrc/
指します。src/core/tools/
src/gui/
すべてのスクリプトで調整できsys.path[0]
ます (次のような構成を使用して、たとえば の先頭にgui.py
):
if __name__ == '__main__':
if sys.path[0]: sys.path[0] = os.path.dirname(os.path.abspath(sys.path[0]))
ただし、これは一種の冗長であり、何千ものスクリプトを含む成熟したコード ベースでは面倒です。スイッチも知ってい-m
ます:
python -m gui.gui
ただし、これには現在のディレクトリが必要src/
です。
ファイルを変更するなど、目的の結果を達成するためのより良い方法はあり__init__.py
ますか?
編集:これはPython 2.7用です:
~$ python -V
Python 2.7.3