我按照这个说明从一个大的包中创建多个小的(独立的)Python2 包 - https://packaging.python.org/guides/packaging-namespace-packages/#pkg-resources-style-namespace-packages
现在我有多个具有这样结构的子(包):https://github.com/pypa/sample-namespace-packages/tree/master/pkg_resources
我可以独立安装和使用它们,它运行得非常完美。
但是由于我在同一个命名空间下有 12 个包,我希望能够通过运行一个命令(例如 pip install
)来安装它们。例如。一些 future 的项目将需要它们,所以我更喜欢将它们作为(常规)整体(一个依赖项)提供服务,但有时我只需要其中一个(这就是我使用命名空间的原因)。所以我需要一些 setup.py
我的命名空间根目录中的文件,其中包含 install_requires
中的所有子包要不然是啥?我不知道如何像在任何常规项目结构中一样在根命名空间下一次安装所有小包(当我们不拆分它们并且根本不使用命名空间时),但是有单独安装它们的选项?
最佳答案
这听起来像是如何正确管理依赖项的普遍问题,这与您的共享命名空间功能无关。对于您的特殊问题,我会推荐以下内容:install_requires
仅用于绝对必要的依赖项(那些需要存在或程序无法执行的依赖项),因此它不适合您的情况。
最好使用 extras_require
directive ,它允许您在某些情况下指定其他依赖项。常见的附加功能是 dev
– 开发过程中需要的包 – 或 doc
– 构建文档所需的包。
假设在同一命名空间下的包称为 nsp1、nsp2 和 nsp3,您可以在 setup.py
中的任何包中指定:
setup(
name="Project-A",
...
extras_require={
'all': ["nsp1", "nsp2", "nsp3"],
'set1': ["nsp1", "nsp2"],
}
)
之后,您可以使用
pip3 install nsp1[all]
安装它们(假设您已经为 nsp1 扩展了 setup.py
)或 pip3 install .[all]
用于本地安装。如果您的“一些 future 项目”中的任何一个恰好需要这些依赖项,您可以将这些附加项添加到其依赖项中,例如在其
setup.py
:install_requires=['nsp1[all]', …]
另一种方法是使用
requirement.txt
:nsp1
nsp2
nsp3
并使用
pip install -rrequirement.txt
安装它们
关于Python 命名空间包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55985034/