繁体   English   中英

如何在 Python 中创建命名空间包?

[英]How to create namespace packages in Python?

我有一个 Python 3 项目,其结构如下:

project/
|
+--root/
   |
   +--__init__.py
   |
   +--sub/
      |
      +--__init__.py
      |
      +--actualcode.py

我想使用“命名空间包”,以便我的库与单独项目中的其他相关库共享一个公共命名空间。 导入语句应如下所示:

from root.sub.actualcode import something

根文件夹中的__init__.py文件包含以下用于创建命名空间 package 的语句:

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

但是当我导入root.sub时我无法引用代码。 它仅在我编写时才有效:

from sub.actualcode import something # doesn't work with "root.sub..."!

我应该怎么做才能使用root作为命名空间?

命名空间包可以使用 分发构建。 诀窍是将以下行添加到setup的参数中:

setup(
  # ...
  namespace_packages  = ["root"]
)

问题中示例的 rest 是正确的。

我刚刚尝试了您的示例,但它似乎像您希望的那样工作:

    >>> from root.sub.actualcode import foo
    >>> foo()
    Bar!

我从包含root文件夹的目录中运行了 Python 解释器。 我创建了空的__init__.py文件,我的actualcode.py看起来像这样:

    #!/bin/python3

    def foo():
        print("Bar!")

不同之处在于我的__init__.py文件是空的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM