gpt4 book ai didi

python - setup.py:先运行 build_ext

转载 作者:太空狗 更新时间:2023-10-30 00:40:11 25 4
gpt4 key购买 nike

我正在使用一个 setup.py,它在 build_ext 步骤中创建了一大堆 SWIG 接口(interface)文件。这需要先运行,因为后续构建步骤需要 python 文件的完整列表才能正常工作(比如将 python 文件复制到包目录、创建 egg、创建源列表等)。

这是当前执行 setup.py install 时发生的情况:

running install
running bdist_egg
running egg_info
running install_lib
running build_py
running build_ext

build_py 步骤尝试将它找到的所有 python 文件复制到构建目录。这些文件在 build_ext 运行之前不存在(swig 创建了一堆 .py 文件)。

This answer建议更改 sub_commands 但似乎没有任何作用。

我尝试像这样子类化 install 命令类,以便在执行其他任何操作之前运行 build_ext:

class Build_ext_first(setuptools.command.install.install):
def run(self):
self.run_command("build_ext")
super(Build_ext_first, self).run()

..然后使用 cmdclass 进行设置:

setup(
...
cmdclass = {'install' : Build_ext_first}
)

但这没有用,因为 super 不适用于旧式类,而且 install 显然没有继承自 object .

我如何首先执行build_ext

最佳答案

因为害怕在 2 年前的帖子上发帖。我认为解决这个问题的正确方法是在“构建”阶段修复它:

from setuptools import setup, find_packages, Extension
from setuptools.command.build_py import build_py as _build_py

class build_py(_build_py):
def run(self):
self.run_command("build_ext")
return super().run()

setup(...,
cmdclass = {'build_py' : build_py},
)

这样它适用于 bdist_wheel 以及安装(还没有测试其他东西)。

注意 Python 2 中的 super 语法有点不同:

class build_py(_build_py):
def run(self):
self.run_command("build_ext")
return _build_py.run(self)

关于python - setup.py:先运行 build_ext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29477298/

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