我有一个这样的“规范文件结构”(我给出了合理的名称以方便阅读):
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,没有任何变化。