我正在按照以下说明从一个大的https://packaging.python.org/guides/packaging-namespace-packages/#pkg-resources-style-namespace-packages
中创建多个小的(独立的)Python2软件包现在我有多个子(包),其结构如下:https://github.com/pypa/sample-namespace-packages/tree/master/pkg_resources
我可以独立安装和使用它们,效果非常完美。
但是由于我在同一个名称空间下有12个软件包,所以我希望能够通过运行一个命令(例如pip install
)来安装它们。例如。一些将来的项目将全部需要它们,因此我更喜欢将它们作为(常规)整体(一个依赖项)来使用,但有时我只需要其中一个(这就是为什么要使用名称空间)。所以我需要在我的命名空间的根目录中有一个setup.py
文件,其中包含install_requires
中的所有子包,或者是什么?我无法弄清楚如何像在任何常规项目结构中一样,将所有小软件包一次安装在根名称空间下(当我们不拆分它们并且根本不使用名称空间时),但是是否可以单独安装?
答案 0 :(得分:1)
这听起来像是一个如何正确管理依赖项的普遍问题,它与您的共享名称空间功能无关。对于您的特殊问题,我建议以下内容:
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]
进行本地安装。
如果您的“未来某些项目”中的任何一个都需要这些依赖项,则可以将这些额外功能添加到其依赖项中,例如在其setup.py
中:
install_requires=['nsp1[all]', …]
一种替代方法是使用requirement.txt
:
nsp1
nsp2
nsp3
并使用pip install -rrequirement.txt