我有一个具有以下结构的Python 3项目:
project/
|
+--root/
|
+--__init__.py
|
+--sub/
|
+--__init__.py
|
+--actualcode.py
我想使用“命名空间包”,以便我的lib与不同项目中的其他相关库共享一个公共命名空间。 import语句应如下所示:
from root.sub.actualcode import something
根文件夹中的__init__.py
文件包含以下用于创建命名空间包的语句:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
但是在导入root.sub
时我无法引用代码。它只在我写作时才有效:
from sub.actualcode import something # doesn't work with "root.sub..."!
如何将root
用作命名空间?
答案 0 :(得分:0)
可以使用distribute构建命名空间包。然后诀窍是将以下行添加到setup
:
setup(
# ...
namespace_packages = ["root"]
)
问题的其余部分是正确的。
答案 1 :(得分:-2)
我刚试过你的例子,但它看起来像你想要的那样:
>>> from root.sub.actualcode import foo
>>> foo()
Bar!
我从包含root
文件夹的目录中运行了Python解释器。我创建了空的__init__.py
文件,我的actualcode.py
看起来像这样:
#!/bin/python3
def foo():
print("Bar!")
不同之处在于我的__init__.py
文件为空。