如何在pyproject.toml中忽略指定包的子依赖?
解决pyproject.toml中忽略特定包依赖的问题
如果你想引入一个依赖torch的包,但不想让包管理工具自动安装torch(毕竟它体积大,且你已有的版本兼容),可以根据你使用的包管理工具,用以下方式配置pyproject.toml:
用Poetry管理项目
快速添加目标包(不带依赖)
直接用--no-deps参数添加目标包,这样pyproject.toml里只会记录目标包,不会拉取它的依赖:
poetry add your-target-package --no-deps
如果已经加过目标包,手动删掉pyproject.toml里自动生成的torch依赖,再运行poetry lock --no-update更新锁文件即可。
确保协作安装时也不自动装torch
把torch设为可选依赖,这样默认安装不会拉取它,只有显式指定才会安装:
[tool.poetry.dependencies] python = "^3.8" your-target-package = "*" torch = { version = ">=1.10", optional = true } [tool.poetry.extras] torch = ["torch"]
团队成员安装时直接运行poetry install就不会装torch,需要的话再用poetry install --with torch。
用标准PEP 621配置(pip/setuptools)
方法1:阻止torch自动安装
在[project.dependencies]里给torch加个永远不满足的环境标记,pip就会跳过它的安装:
[project.dependencies] your-target-package = "*" torch = { version = ">=1.10", markers = "sys_platform == 'nonexistent-platform'" }
这种方式简单直接,你的本地torch会被目标包正常调用。
方法2:约束依赖版本(需额外安装参数)
先创建一个constraints.txt文件:
torch>=1.10
再在pyproject.toml里声明目标包:
[project] name = "your-project" version = "0.1.0" dependencies = ["your-target-package"]
安装时加上约束参数:
pip install . --constraint constraints.txt --no-deps your-target-package
不过这种方式需要安装时额外传参,不如方法1省心。
注意:无论用哪种方式,都要确保你本地的torch版本和目标包的要求兼容,最好在项目文档里说明需要预先安装符合版本要求的torch。
内容的提问来源于stack exchange,提问作者Richie Bendall
相关产品推荐
相关产品推荐

