【发布时间】:2018-12-17 03:26:53
【问题描述】:
我知道可以使用extra-require 在 setup.py 中定义可选依赖项。现在我问自己是否可以将包标记为可选,以便您可以选择要安装的子包?有没有办法将可选依赖项映射到可选包。
例如,如果我有一个名为 project 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 来存档此行为?
【问题讨论】:
-
您需要将项目A拆分为namespace packages。请参阅sample。
-
我认为这不提供我正在寻找的功能。我想要一个可以“部分”安装的包,这意味着只安装一些子包。这应该可以通过在需求文件中命名子包来实现...
-
如果不将子包真正拆分为单独的包,就无法创建子包。
-
您寻找的东西是不可能的。 Extras 仅定义要安装的附加包列表(在 PyPI 包的意义上),除此之外不定义任何内容。没有“完整”或“部分”软件包安装之类的东西;包是一个原子实体。 @phd 在第一条评论中建议的是正确的方法。
标签: python python-3.x pip setup.py python-packaging