我正在使用最新版本的pip,23.01
。我有一个带有依赖项和可选依赖组(也称为“extras”)的pyproject.toml
文件。为了避免冗余并更容易管理可选依赖组,我想知道如何让可选依赖组需要其他可选依赖组。
我的pyproject.toml
中的可选依赖组在依赖项上存在冗余重叠。我猜它们可以被描述为“分层”。它看起来像这样:
[project]
name = 'my-package'
dependencies = [
'pandas',
'numpy>=1.22.0',
# ...
]
[project.optional-dependencies]
# development dependency groups
test = [
'my-package[chem]',
'pytest>=4.6',
'pytest-cov',
# ...
# Redundant overlap with chem and torch dependencies
'rdkit',
# ...
'torch>=1.9',
# ...
]
# feature dependency groups
chem = [
'rdkit',
# ...
# Redundant overlap with torch dependencies
'torch>=1.9',
# ...
]
torch = [
'torch>=1.9',
# ...
]
在上面的例子中,pip install .[test]
将包括所有 chem
和 torch
组的软件包,而 pip install .[chem]
将包括 torch
组的软件包。
通过删除重叠和对另一个组的引用,用户仍然可以通过执行 pip install .[chem,torch]
来获取所需的 chem
软件包,但是我与数据科学家合作,他们可能不会立即意识到 torch
组是 chem
组的要求等。
因此,我想要一个类似于这样的文件:
[project]
name = 'my-package'
dependencies = [
'pandas',
'numpy>=1.22.0',
# ...
]
[project.optional-dependencies]
# development dependency groups
test = [
'my-package[chem]',
'pytest>=4.6',
'pytest-cov',
# ...
]
# feature dependency groups
chem = [
'my-package[torch]',
'rdkit',
# ...
]
torch = [
'torch>=1.9',
# ...
]
这种方法行不通,因为my-package
托管在我们的私有pip存储库中,所以像上面的例子一样使用'my-package[chem]'
会获取先前构建版本的chem
组包。
似乎使用Poetry及其pyproject.toml
格式/功能可以实现此目的,但我宁愿不太改变我们的构建系统。这是否可能使用pip?
my-package[torch]
作为chem
组依赖项编写,它将从存储库的最新托管版本安装,而不是安装在pyproject.toml中新指定的torch
组。我尝试使用点语法,例如.[torch]
,希望这样可以解决问题,但显然pip无法在pyproject.toml文件中识别它。很高兴了解到Poetry的差异!我对Poetry还不太熟悉。 - James