我正在开发一个具有类似于以下文件结构的包:
test.py
package/
__init__.py
foo_module.py
example_module.py
如果我调用import package
test.py,我希望包模块看起来类似于:
>>> vars(package)
mapping_proxy({foo: <function foo at 0x…}, {example: <function example at 0x…})
换句话说,我希望所有模块的成员都package
在package
's 命名空间中,并且我不希望模块本身在命名空间中。package
不是子包。
假设我的文件如下所示:
foo_module.py:
def foo(bar):
return bar
example_module.py:
def example(arg):
return foo(arg)
测试.py:
print(example('derp'))
如何构建 test.py、example_module.py 和 __init__.py 中的导入语句,以便在包目录外部(即 test.py)和包本身(即 foo_module.py 和 example_module.py)内工作?我尝试的一切都会给出Parent module '' not loaded, cannot perform relative import
或ImportError: No module named 'module_name'
。
另外,作为旁注(根据 PEP 8):“非常不鼓励对包内导入进行相对导入。始终对所有导入使用绝对包路径。即使现在 PEP 328 已在 Python 2.5 中完全实现,它的样式明确的相对导入是不鼓励的;绝对导入更便携,通常更具可读性。”
我正在使用 Python 3.3。