gpt4 book ai didi

python - 使用 Python setuptools 将 Cython 编译的 pyd 文件放入其原始文件夹中?

转载 作者:行者123 更新时间:2023-12-02 08:52:49 25 4
gpt4 key购买 nike

我正在尝试为包含 Cython 模块的 Python 3.4 应用程序构建 setup.py 包。我的计划是有一个 setup.py 文件,它需要 Cython 并编译 .pyx 文件,通常我会在 Win32(x86 和 x64)和 Mac 上运行它,然后生成平台轮并将它们上传到 PyPI,所以普通用户不需要 Cython 或编译任何东西。

目前,我可以获得 setup.py 脚本来构建 .pyd 文件,但它不会将构建的 .pyd 文件放在与原始 .pyx 文件相同的位置,而这正是我需要的位置。

我尝试手动复制 .pyd 文件,但是当我通过 bdist_wheel 生成轮子时,我得到一个纯 Python 轮子,我认为这是错误的,因为根据平台不同,我构建的 .pyx 文件有不同版本。我还尝试对 Distribution 类进行子类化并强制 is_pure() 返回 False (如 here in the Building Wheels section 中所述),但这不起作用。 (仍然生成纯Python轮。)

我假设,如果我能让 setup.py 脚本将编译后的文件放在正确的位置,那么轮子就不是纯 Python,一切都会好起来的。

所以我的问题是:

  1. setup.py 中是否有某种设置告诉它将编译后的 Cython 文件放入与源文件相同的位置?
  2. 或者有没有办法将编译后的文件复制到我需要的位置,但仍将轮子构建为非纯的?
  3. 或者我是否以错误的方式处理这个问题?我应该更改我的 Python 代码以从其他地方提取已编译的包吗? (这对我来说似乎不对。)
  4. [编辑] 或者我应该将编译好的二进制 .pyd/.so/.dylib 放入包中,添加逻辑以在运行时根据体系结构获取正确的 .pyd,然后拥有一个纯 Python 轮子? (这对我来说似乎也是不对的。)

有关我的设置的更多信息:我在 setup.py 脚本中使用 setuptools (不是 distutils)。我的 setup.py 的片段在这里(删除了很​​多内容以保留相关内容):

from setuptools import setup, Extension
from Cython.Build import cythonize
from Cython.Distutils import build_ext

...

extensions = [
Extension(name='audio_interface',
sources=['mpf/mc/core/audio/audio_interface.pyx'],
include_dirs=include_dirs,
library_dirs=library_dirs,
libraries=libraries,
extra_objects=extra_objects,
extra_compile_args=extra_compile_args,
extra_link_args=extra_link_args),

...

setup(
...
ext_modules=cythonize(extensions),
cmdclass= {'build_ext': build_ext},
...

谢谢!布赖恩

最佳答案

我遇到了类似的问题,并且我找到了一个也适合您的解决方案。

来自 distutils.core.Extension 的官方 Python 文档,name 参数是:

the full name of the extension, including any packages — ie. not a filename or pathname, but Python dotted name

因此,如果您将 setup.py 修改为:

...

extensions = [
Extension(name='mpf.mc.core.audioaudio_interface', # using dots!
sources=['mpf/mc/core/audio/audio_interface.pyx'],
include_dirs=include_dirs,
library_dirs=library_dirs,
libraries=libraries,
extra_objects=extra_objects,
extra_compile_args=extra_compile_args,
extra_link_args=extra_link_args),

...

您将在您想要的位置找到已编译的二进制文件。

关于python - 使用 Python setuptools 将 Cython 编译的 pyd 文件放入其原始文件夹中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35497572/

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