2015-07-30 4 views
3

У меня есть приложение Python, к которому я недавно добавил модуль Cython. Запуск его из скрипта с pyximport отлично работает, но мне также нужна исполняемая версия, которую я создаю с помощью cx_freeze.cx_freeze не может включить Cython .pyx module

Проблема в том, что попытка его создания дает мне исполняемый файл, который вызывает импорт 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'] 
    ) 

... но тогда все, что дает мне это No module named fx в cx_freeze вместо времени сборки.

Как это сделать?

ответ

3

Решение должно состоять из двух отдельных вызовов: setup(); один для построения fx.pyx с Cython, затем один для упаковки EXE с помощью cx_freeze. Вот модифицированный 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'] 
    ) 
+1

Просто для информаций, для того, чтобы сделать это работает, вы должны ввести «питон setup-cython.py build_ext --inplace», а затем «питон setup-cython.py сборки» – Krozark

Смежные вопросы