【问题标题】:Python: multiple packages with multiple setup.py filesPython:具有多个 setup.py 文件的多个包
【发布时间】:2019-08-04 03:59:06
【问题描述】:

我很难构建我的 Python setup.py 文件来做我想做的事。我有一个这样的包装:

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

【问题讨论】:

标签: python package setup.py namespace-package


【解决方案1】:

如果我的理解正确,您尝试设置的是命名空间包(一个包含其他单独安装的包的空包),即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'),这样可以确保在先安装较低级别的包的情况下创建命名空间。

我很确定它是这样工作的。我还在学习 setuptools,所以如果我错了,不胜感激。

【讨论】:

猜你喜欢
  • 2022-11-03
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-16
  • 2018-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多