设置.py:在任何els之前运行build\u ext

2024-05-14 15:56:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我和一个设置.py这会在build\u ext步骤中创建一大堆SWIG接口文件。这需要首先运行,因为后续的构建步骤需要完整的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

^{pr2}$

…然后使用cmdclass进行设置:

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

但这并不起作用,因为super不适用于旧样式的类,install显然也不从{}继承。在

如何先build_ext?在


Tags: install文件pybuild目录列表源代码egg
2条回答

执行super()的旧方法似乎是向前兼容的,所以我只是这样做了:

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


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

因为害怕在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(还没有测试其他东西)。在

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

^{pr2}$

相关问题 更多 >

    热门问题