【问题标题】:How can I ask setup.py to list dependencies?如何让 setup.py 列出依赖项?
【发布时间】:2017-12-09 10:17:04
【问题描述】:

我有一个第三方包,它有一个setup.py 文件,它以标准方式调用setup(),传递test_requiresinstall_requiresextras_require。 (它不使用requirements.txt 文件。)

我正在运行 Windows 机器(在 Appveyor 上),而 pip install 在 Windows 上的某些软件包非常糟糕。我想使用 Conda。

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

  1. 让 setup.py 列出它需要的依赖项,而不采取任何行动。
  2. 将该列表传递给 conda 进行安装。
  3. 使用 installtest 命令调用 setup.py,确信它会检查其要求,并且找不到需要安装的任何内容。

我认为python setup.py --requires 可能会成功,但它的文档记录很差,并且没有返回任何内容。

如果这是一个合理的方法?如果是这样,有没有办法让 setup.py 评估它的依赖关系,并在不安装它们的情况下列出它们。

【问题讨论】:

  • 你要安装什么包?
  • @CaryShindell:这有关系吗? numpy、matplotlib、scipy 等
  • 我认为如果他们在使用特定包时遇到问题,可能有人知道它的依赖关系。如果它是一个更笼统的问题,我很抱歉。

标签: python setuptools packaging setup.py


【解决方案1】:

python setup.py egg_info 将编写一个 package_name.egg-info/requires.txt 文件,其中包含您想要的依赖项。

【讨论】:

  • 我注意到可选要求的格式与 PIP/Conda 不兼容。
  • 此命令在 python 3.6 上没有创建 requires.txt,不确定原因。
  • 这是正确答案,谢谢。适用于现代 python,使用现有工具,不需要编写额外代码,并提供正确格式的输出。
【解决方案2】:

您可以让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怎么办?
  • 使用 setuptools 应该没关系。当我使用上面的代码时,我在使用 setuptools 编写的 setup.py 上运行它。
  • 你说得对,我的setup.py 文件中存在不相关的错误,仅在以这种方式调用时出现,而不是在命令行中直接调用时出现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 2015-01-10
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
  • 2017-12-28
  • 2018-06-18
相关资源
最近更新 更多