如何让setup.py列出依赖项?

12

我有一个第三方包,其中包含一个 setup.py 文件,以标准方式调用 setup() 函数,并传递了 test_requires, install_requiresextras_require 参数。(它不使用 requirements.txt 文件。)

我正在运行 Windows 机器(在 Appveyor 上),但是在一些软件包上,Windows 上的 pip install 命令效果很差。我想使用 Conda。

在我看来,理想的方法是:

  1. 要求 setup.py 列出所需的依赖项,但不执行任何操作。
  2. 将该列表传递给 Conda 进行安装。
  3. 使用 installtest 命令调用 setup.py ,并确信它会检查其要求,并且不需要安装任何东西。

我认为 python setup.py --requires 可能行得通,但文档不太好,而且没有返回结果。

这个方法可行吗?如果可以,有没有办法要求 setup.py 评估其依赖关系,并列出它们而无需安装它们。


你想安装哪个软件包? - Cary Shindell
1
@CaryShindell:这有关系吗?numpy、matplotlib、scipy等。 - Oddthinking
我想如果他们遇到了特定包的问题,那么有人可能知道它的依赖关系。如果这是更一般性的问题,那么我很抱歉。 - Cary Shindell
2个回答

15

python setup.py egg_info 会生成一个 package_name.egg-info/requires.txt 文件,其中包含您想要的依赖关系。


3
我注意到可选需求的格式与PIP/Conda不兼容。 - Oddthinking
这个命令在Python 3.6上没有创建requires.txt文件,原因不确定。 - Jamie Nicholl-Shelley
这是正确的答案,谢谢。它适用于现代Python,使用现有工具,不需要编写额外的代码,并以正确的格式提供输出。 - thule

8

您可以使用distutils读取setup.py并返回依赖项。命令distutils.core.run_setup允许您在受控环境中运行setup.py

import distutils.core
setup = distutils.core.run_setup("setup.py")
print(setup.install_requires)

Python变量setup具有一组属性,允许您操纵setup.py文件。

如果 setup.py 使用了 setuptools,我该怎么办? - xjcl
它是否使用setuptools并不重要。当我使用上述代码时,我正在运行一个使用setuptools编写的setup.py文件。 - ajaali
你说得对,我的 setup.py 文件中有一些无关的错误,只有在这种方式调用时才会出现,而直接在命令行上调用时则不会。 - xjcl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接