使用cx_Freeze编译Python C扩展

Joh*_*ver 2 python windows distutils cx-freeze

我试图从带有C扩展模块的Python 3包在Windows上创建一个exe.在distutils中,您可以创建如下的扩展:

from distutils.core import setup, Extension

module1 = Extension('demo',
                     sources = ['demo.c'])

setup (name = 'PackageName',
       version = '1.0',
       description = 'This is a demo package',
       ext_modules = [module1])
Run Code Online (Sandbox Code Playgroud)

然后,扩展将使用适当的编译器进行编译,并与命令一起放在其他模块旁边:

python setup.py build_ext --inplace
Run Code Online (Sandbox Code Playgroud)

cx_Freeze是一个模块,可以将您的代码与Python解释器和相关的包一起打包到exe文件中.然后,最终用户可以在不安装Python的情况下使用您的程序.不幸的是,cx_Freeze没有Extension类,我找不到用cx_Freeze处理编译的方法.

我不确定的一个解决方案是首先使用distutils/setuptools构建扩展,然后使用cx_Freeze创建可执行文件.我不想重新发明轮子,所以我想知道在这个领域有更多经验的人是否有解决方案.

Joh*_*ver 5

我找到了一个有效的解决方 我可以从distutils导入Extension,并将其从cx_Freeze传递到设置中:

from cx_Freeze import setup
from distutils.core import Extension
...
setup=(...
       ext_modules=Extension(...))
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为cx_Freeze是建立在distutils之上的.最初,我试图使用setuptools.setup,但这不起作用.