私はそのような「標準的なファイル構造」を持っています(読みやすくするために賢明な名前を付けています):
mainpack/
__main__.py
__init__.py
- helpers/
__init__.py
path.py
- network/
__init__.py
clientlib.py
server.py
- gui/
__init__.py
mainwindow.py
controllers.py
この構造では、たとえば、各パッケージに含まれるモジュールはhelpers
、次のような相対インポートを介してユーティリティにアクセスすることができます。
# network/clientlib.py
from ..helpers.path import create_dir
__main__.py
プログラムは、次の方法でファイルを使用して「スクリプトとして」実行されます。
python mainpack/
私がこれらの行に入れたPEP 366に従おうとしています:__main__.py
___package___ = "mainpack"
from .network.clientlib import helloclient
しかし、実行時:
$ python mainpack
Traceback (most recent call last):
File "/usr/lib/python2.6/runpy.py", line 122, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.6/runpy.py", line 34, in _run_code
exec code in run_globals
File "path/mainpack/__main__.py", line 2, in <module>
from .network.clientlib import helloclient
SystemError: Parent module 'mainpack' not loaded, cannot perform relative import
どうしたの?相対インポートを処理して効果的に使用する正しい方法は何ですか?
現在のディレクトリを PYTHONPATH に追加しようとしましたが、何も変わりません。