【发布时间】:2013-01-03 19:05:35
【问题描述】:
我正在开发一个文件结构类似于以下的包:
test.py
package/
__init__.py
foo_module.py
example_module.py
如果我在 test.py 中调用 import package,我希望包模块看起来像这样:
>>> vars(package)
mapping_proxy({foo: <function foo at 0x…}, {example: <function example at 0x…})
换句话说,我希望package 中的所有模块的成员都在package 的命名空间中,并且我不希望模块本身在命名空间中。 package 不是子包。
假设我的文件如下所示:
foo_module.py:
def foo(bar):
return bar
example_module.py:
def example(arg):
return foo(arg)
test.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。
【问题讨论】:
-
我只是盲目地放在这里,没有尝试:
from package import *怎么样?
标签: python import python-3.x package