我有一个Python应用程序,最近在其中添加了Cython模块。使用pyximport从脚本运行它可以正常工作,但我还需要使用cx_Freeze构建的可执行版本。
麻烦的是,尝试构建它会给我一个可执行文件,该可执行文件会引发ImportError并试图导入.pyx模块。
我像这样修改了setup.py
,看是否可以让它首先编译.pyx,以便cx_Freeze可以成功打包它:
from cx_Freeze import setup, Executable
from Cython.Build import cythonize
setup(name='projectname',
version='0.0',
description=' ',
options={"build_exe": {"packages":["pygame","fx"]},'build_ext': {'compiler': 'mingw32'}},
ext_modules=cythonize("fx.pyx"),
executables=[Executable('main.py',targetName="myproject.exe",base = "Win32GUI")],
requires=['pygcurse','pyperclip','rsa','dill','numpy']
)
...但是所有给我的只是在构建时在cx_Freeze中的
No module named fx
。我该如何工作?
最佳答案
解决方案是对setup()
进行两个单独的调用;一个用Cython构建fx.pyx
,然后一个用cx_Freeze打包exe。这是修改后的setup.py
:
from cx_Freeze import Executable
from cx_Freeze import setup as cx_setup
from distutils.core import setup
from Cython.Build import cythonize
setup(options={'build_ext': {'compiler': 'mingw32'}},
ext_modules=cythonize("fx.pyx"))
cx_setup(name='myproject',
version='0.0',
description='',
options={"build_exe": {"packages":["pygame","fx"]}},
executables=[Executable('main.py',targetName="myproject.exe",base = "Win32GUI")],
requires=['pygcurse','pyperclip','rsa','dill','numpy']
)
关于python - cx_Freeze无法包含Cython .pyx模块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31734230/