Jam*_*mes 14 python pip toml python-packaging pyproject.toml
我正在使用最新版本的 pip 23.01,. 我有一个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',
# ...
]
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,pip install .[test]将包含所有chem和torch组的包,并将pip install .[chem]包含torch组的包。
删除从一个组到另一个组的重叠和引用,用户仍然可以chem通过执行 来获取所需的包pip install .[chem,torch],但我与数据科学家一起工作,他们可能不会立即意识到该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',
# ...
]
Run Code Online (Sandbox Code Playgroud)
这种方法不起作用,因为my-package托管在我们的私有 pip 存储库中,因此'my-package[chem]'像上面的示例一样会获取先前构建的版本的chem组包。
看来使用 Poetry 及其pyproject.toml格式/功能可以使这成为可能,但我不希望对我们的构建系统进行太多切换。这可以用 pip 实现吗?
也许值得将 2 个依赖项组绑定到一个组中,看看是否可以解决问题,如“全部”中所示
[project]
name = "foo"
version = "0.1.0"
[project.optional-dependencies]
socks = ["pysocks"]
jwt = ["pyjwt"]
all = ["foo[socks,jwt]"]
Run Code Online (Sandbox Code Playgroud)