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

时间:2011-07-04 06:52:54

标签: python namespaces package distutils

我有一个具有以下结构的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用作命名空间?

2 个答案:

答案 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文件为空。

相关问题