Python:包含多个setup.py文件的多个包

时间:2011-08-24 20:53:03

标签: python packages setup.py

我很难构建我的Python setup.py文件来做我想做的事情。我有一个这样的pacakge设置:

somestuff_root/
    setup.py
    myutils/
        __init__.py
        a/
            __init__.py
            somestuff.py

我有另外一个这样的软件包设置:

otherstuff_root/
    setup.py
    myutils/
        __init__.py
        b/
            __init__.py
            otherstuff.py

所以事情在我的site-packages /目录中组织,如:

myutils/
    a/
        somestuff.py
    b/
        otherstuff.py

这是我用pip安装它们后我想要的。

我的问题是卸载第二个软件包(带有pip)也会消除第一个软件包 - 这不是我想要发生的事情。我希望它只是删除myutils.b并将myutils.a保持原样。

我怀疑使用myutils /文件夹中有多个 init .py文件会让我感到困惑,但我不确定如何让这些文件正常工作。

-

还找到了这个有用的页面:

http://www.sourceweaver.com/musings/posts/python-namespace-packages

1 个答案:

答案 0 :(得分:3)

如果我正确理解了这一点,那么您要设置的是命名空间包(一个空包,其中包含其他单独安装的包),这是一个feature of setuptools

使用setuptools.setup()参数名称空间的包列表调用namespace_packages

setup(..., namespace_packages=['myutils'], ...)

然后,创建仅包含以下内容的myutils/__init__.py

__import__('pkg_resources').declare_namespace(__name__)

最后,在myutils/a/__init__.pymyutils/b/__init__.py调用pkg_resources.declare_namespace('myutils'),这可确保在首先安装较低级别的包时创建命名空间。

我很确定它的工作原理。我还在学习安装工具,所以如果我错了,我会非常感谢修正。