如何在Python中创建命名空间包?
我有一个Python 3项目,其结构如下:如何在Python中创建命名空间包?,python,namespaces,package,distutils,Python,Namespaces,Package,Distutils,我有一个Python 3项目,其结构如下: project/ | +--root/ | +--__init__.py | +--sub/ | +--__init__.py | +--actualcode.py 我希望使用“名称空间包”,以便我的lib与单独项目中的其他相关lib共享一个公共名称空间。导入语句应如下所示: from root.sub.actualcode import something #!/bi
project/
|
+--root/
|
+--__init__.py
|
+--sub/
|
+--__init__.py
|
+--actualcode.py
我希望使用“名称空间包”,以便我的lib与单独项目中的其他相关lib共享一个公共名称空间。导入语句应如下所示:
from root.sub.actualcode import something
#!/bin/python3
def foo():
print("Bar!")
根文件夹中的\uuuuu init\uuuuuuuu.py
文件包含以下创建命名空间包的语句:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
但是我在导入root.sub
时无法引用代码。只有当我写下:
from sub.actualcode import something # doesn't work with "root.sub..."!
如何使用
根目录
作为名称空间?我刚刚尝试了您的示例,但它的工作方式似乎与您希望的一样:
>>> from root.sub.actualcode import foo
>>> foo()
Bar!
我从包含root
文件夹的目录运行Python解释器。我创建了空的\uuuu init\uuuuuuuupy
文件,我的actualcode.py
如下所示:
from root.sub.actualcode import something
#!/bin/python3
def foo():
print("Bar!")
不同之处在于我的
\uuuu init\uuuuy.py
文件是空的。我刚刚尝试了您的示例,但它的工作方式似乎与您希望的一样:
>>> from root.sub.actualcode import foo
>>> foo()
Bar!
我从包含root
文件夹的目录运行Python解释器。我创建了空的\uuuu init\uuuuuuuupy
文件,我的actualcode.py
如下所示:
from root.sub.actualcode import something
#!/bin/python3
def foo():
print("Bar!")
不同之处在于我的
\uuuu init\uuuu.py
文件是空的。命名空间包可以使用构建。诀窍是在设置的参数中添加以下行:
setup(
# ...
namespace_packages = ["root"]
)
问题中示例的其余部分是正确的。命名空间包可以使用构建。诀窍是在设置的参数中添加以下行:
setup(
# ...
namespace_packages = ["root"]
)
问题中示例的其余部分是正确的。在包的setup.py中正确定义了名称空间吗?distutils没有在setup.py中配置名称空间的权限。没有人关心distutils。setuptools或distribute是got@Sentinel谢谢你的提示。遵循distutils文档应该可以工作,但分发可能更好。它有直接的名称空间是否在包的setup.py中正确定义?distutils没有在setup.py中配置名称空间的权限。没有人关心distutils。setuptools或distribute是got@Sentinel谢谢你的提示。遵循distutils文档应该可以工作,但分发可能更好。它具有直接的名称空间,但不适用于具有相同根名称空间的另一个项目。好的,因此此解决方案适用于此处发布的案例,但不是您试图找到的一般解决方案。重要的细节是“名称空间包”。但这不适用于具有相同根名称空间的另一个项目。好的,因此,此解决方案适用于此处发布的案例,但不是您试图找到的一般解决方案。重要的细节是“名称空间包”。