我不建议做这样的事。正如多次提到的,install_requires和requirements.txt绝对不应该是同一个列表。但是由于涉及到pip的私有内部api,有很多误导性的答案,因此可能值得考虑更理智的替代方案……
没有pip,可以从setuptools setup.py脚本中解析一个相对简单的requirements.txt文件。setuptools项目已经在其顶级包pkg_resources中包含了必要的工具。
它或多或少是这样的:
#!/usr/bin/env python3
import pathlib
import pkg_resources
import setuptools
with pathlib.Path('requirements.txt').open() as requirements_txt:
install_requires = [
str(requirement)
for requirement
in pkg_resources.parse_requirements(requirements_txt)
]
setuptools.setup(
install_requires=install_requires,
)
同样,这只适用于简单的requirements.txt文件。请参阅pkg_resources文档页中的需求解析,以获得关于所处理内容的详细信息。简而言之,每一行都应该是有效的PEP 508需求。不支持真正特定于pip的符号,这将导致失败。
警告之词
如前所述,不建议这样做。requirements.txt文件和“安装依赖项”列表是两个不同的概念,它们是不可互换的。
但是如果你确实写了一个setup.py安装脚本来读取requirements.txt,那么确保requirements.txt文件包含在“源发行版”(sdist)中,否则安装显然会失败。
自从setuptools版本62.6以来,可以在setup.cfg中写这样的东西:
[options]
install_requires = file: requirements.txt
或者在pyproject.toml中:
[project]
dynamic = ["dependencies"]
[tool.setuptools.dynamic]
dependencies = requirements.txt
上述忠告同样适用:
只支持非常简单的文件
该文件必须添加到sdist
此外,它目前被认为是一个“测试版”功能。
注:
另一个答案是:https://stackoverflow.com/a/59971236/11138259
https://caremad.io/posts/2013/07/setup-vs-requirement/
https://setuptools.pypa.io/en/latest/history.html#v62-6-0