[英]Python setup.py define optional subpackages with optional dependencies
我知道可以使用extra-require
在 setup.py 中定义可选的依赖extra-require
。 现在我问自己是否也可以将包标记为可选,以便您可以选择要安装的子包? 有没有办法将可选依赖项映射到可选包。
例如,如果我有一个名为项目 A 的项目和这个包结构:
Project
--subPackage 1
--subPackage 2
--subPackage 3
我想将子包 2 和 3 标记为可选,以便默认情况下不安装这些包。 但是如果一个子包是通过 pip 或项目 B 的要求指定的,它应该与依赖项一起安装。
因此,项目 B 的预期行为应如下所示:
项目 B 的 setup.py:
setup(
name='Project B',
version='0.0.0',
install_requires=["ProjectA"])
结果只安装了带有子包 1 的项目 1。 但是,如果我将install_requires
行更改为install_requires=["ProjectA[Subpackage2]"]
。 项目 A 与子包 1 和 2 一起安装,并具有子包 1 和 2 的给定要求。
这是否可以为项目 A 创建 setup.py 以存档此行为?
您可以通过将包拆分为命名空间包来实现此目的。 在这种情况下,您的回购将类似于:
project-subpackage-a/
setup.py
project/
subpackage_a/
__init__.py
project-subpackage-b/
setup.py
project/
subpackage_b/
__init__.py
在这里,您有两个完全独立的包,它们有自己的setup.py
配置。 这意味着您可以像使用任何其他软件包一样使用install_requires
和extra_requires
。
但是,与其他包不同的是,如果您要单独或通过 requires 安装两个命名空间包,它们都可以存在于同一个包命名空间中。
也就是说,如果你安装了这两个包,你就可以像它们来自同一个源一样导入它们:
from project import subpackage_a
from project import subpackage_b
有关如何正确设置命名空间包的更多详细信息,请查看python 文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.