如何在setuptools项目的pyproject.toml中引用requirements.txt?
在pyproject.toml中引用requirements.txt的可行方案(不用回退setup.py)
直接说结论:完全可以做到,用setuptools的动态字段配置就能实现,不需要保留setup.py,步骤如下:
1. 标记依赖为动态字段
在pyproject.toml的[project]部分,把dependencies加入dynamic列表,告诉setuptools这个字段的值不是直接写在这里,而是从外部读取:
[project] name = "你的项目名" version = "0.1.0" # 记得填好其他必填项,比如authors、description这些 dynamic = ["dependencies"]
2. 配置setuptools读取requirements.txt
在pyproject.toml里加个[tool.setuptools.dynamic]区块,指定从requirements.txt文件加载依赖:
[tool.setuptools.dynamic] dependencies = { file = ["requirements.txt"] }
3. 保证requirements.txt格式正确
requirements.txt里的依赖要符合PEP 508规范,比如:
requests==2.31.0 numpy>=1.24.0,<2.0.0
几个要注意的点
- 你原来用pip-compile从requirements.in生成requirements.txt的流程完全不受影响,每次更新依赖后正常编译就行。
- 这种方式完美保留了你想要的两个优势:固定依赖闭包实现可复现安装,方便排查依赖冲突。
- 提醒下:如果你的项目是要传到PyPI的类库,这种方式不太合适,因为PyPI要求依赖直接写在元数据里;但你的场景是终端用户/非类库项目,完全没问题。
内容的提问来源于stack exchange,提问作者bluenote10
相关产品推荐
相关产品推荐

