gpt4 book ai didi

python - setup_requires 仅适用于某些命令

转载 作者:行者123 更新时间:2023-12-01 02:17:18 25 4
gpt4 key购买 nike

我有一个 distutils 风格的 Python 包,它的构建步骤需要特定的、相当大的依赖项。目前,此依赖项是在 distutils.setup 的 setup_requires 参数下指定的。不幸的是,这意味着将为 setup.py 的任何执行构建依赖关系,包括运行 setup.py clean 时。这造成了相当讽刺的情况,即清理步骤有时会导致编译大量代码。

正如我所说,只有 build 步骤需要此设置依赖项。有没有办法在 setup.py 中对此逻辑进行编码,以便所有不调用构建命令的命令都可以在没有它的情况下运行?

最佳答案

您始终可以命令 Distribution 显式获取某些包,这与您在 setup_requires 中定义它们的方式相同。仅 build 命令所需的 numpy 依赖项示例:

from distutils.command.build import build as build_orig
from setuptools import setup, find_packages, Command, dist


class build(build_orig):

def run(self):
self.distribution.fetch_build_eggs(['numpy'])
# numpy becomes available after this line. Test it:
import numpy
print(numpy.__version__)
super().run()

setup(
name='spam',
packages=find_packages(),
cmdclass={'build': build,}
...
)

依赖项的传递方式与在 setup_requires arg 中定义的方式相同,因此版本规范也可以:

self.distribution.fetch_build_eggs(['numpy>=1.13'])

尽管我必须注意,通过 setup_requires 获取依赖项通常比通过 pip 安装它们要慢得多(特别是当您有一些严重依赖项时)必须首先从源代码构建),因此,如果您可以确定您将拥有可用的 pip ( or use python3.4 and newer ),则采用 phd 建议的方法在他的answer会节省你的时间。然而,在构建旧的 Python 版本或晦涩的 Python 安装(例如 MacOS 上的系统 Python)时,通过分发获取 Egg 可能会很方便。

关于python - setup_requires 仅适用于某些命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48283503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com