如何在Python中创建命名空间包?
我有一个Python 3的项目,结构如下:
project/
|
+--root/
|
+--__init__.py
|
+--sub/
|
+--__init__.py
|
+--actualcode.py
我想使用“命名空间包”,这样我的库就可以和其他相关的库共享一个公共的命名空间,且这些库可能在不同的项目中。导入语句应该像这样:
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
当作一个命名空间使用呢?
2 个回答
-1
我刚刚试了你的例子,但看起来它的工作方式和你想的一样:
>>> from root.sub.actualcode import foo
>>> foo()
Bar!
我从包含root
文件夹的目录运行了Python解释器。我创建了空的__init__.py
文件,而我的actualcode.py
看起来是这样的:
#!/bin/python3
def foo():
print("Bar!")
不同之处在于我的__init__.py
文件是空的。
0
命名空间包可以通过 distribute 来创建。诀窍是要在 setup
的参数中添加以下这一行:
setup(
# ...
namespace_packages = ["root"]
)
问题中的其他示例是正确的。