Может ли Cython компилироваться в EXE?
Я знаю, какова цель Cythons. Это написать скомпилированные расширения C на Python-подобном языке, чтобы ускорить ваш код. Что я хотел бы знать (и не могу найти, используя мой google-fu), так это то, что Cython может каким-то образом компилироваться в исполняемый формат, так как он, кажется, уже разбивает код python на C.
Я уже использую Py2Exe, который является просто упаковщиком, но мне интересно использовать его для компиляции чего-то, что немного сложнее распаковать (все, что упаковано с помощью Py2EXE, может быть просто извлечено с использованием 7zip, который я не хочу)
Кажется, если это невозможно, моей следующей альтернативой будет просто скомпилировать весь мой код и загрузить его как модуль, а затем упаковать его, используя py2exe, по крайней мере, для получения большей части моего кода в скомпилированную форму, верно?
4 ответа
В принципе, кажется возможным сделать что-то вроде того, что вы хотите, в соответствии с Embedded Pyrex HOWTO. (Pyrex фактически является предыдущим поколением Cython.)
Хм... это имя предлагает лучший поиск, чем я сначала пытался: "встраивание cython" приводит к этой странице, которая звучит как то, что вы хотите.
Вот вики-страница по встраиванию Cython
Предполагая, что вы установили Python для C:\Python31
и вы хотите использовать Microsoft Compiler.
smalltest1.py
- это файл, который вы хотите скомпилировать.
test.exe
- имя исполняемого файла.
Вам нужно установить переменные среды для cl
,
C:\Python31\python.exe C:\Python31\Scripts\cython.py smalltest1.py --embed
cl.exe /nologo /Ox /MD /W3 /GS- /DNDEBUG -Ic:\Python31\include -Ic:\Python31\PC /Tcsmalltest1.c /link /OUT:"test.exe" /SUBSYSTEM:CONSOLE /MACHINE:X86 /LIBPATH:c:\Python31\libs /LIBPATH:c:\Python31\PCbuild
Я успешно использовал Cython & gcc для конвертирования файла *.py в *.exe, используя следующий пакетный файл:
# build.bat
set PROJECT_NAME=test
set PYTHON_DIR=C:\python27
%PYTHON_DIR%\python -m cython --embed -o %PROJECT_NAME%.c %PROJECT_NAME%.py
gcc -Os -I %PYTHON_DIR%\include -o %PROJECT_NAME%.exe %PROJECT_NAME%.c -lpython27 -lm -L %PYTHON_DIR%\libs
Ответ Aftershock хорош, я хочу сказать о запуске приложения без консоли. Больше всего похоже на ответ Aftershock, если вы хотите, чтобы ваше приложение запускалось без консоли, важны два момента:
замените все функции main() в файле ".c", созданные с помощью "cython --embed", на wmain();
добавьте /link /subsystem:windows /entry:wmainCRTStartup в конец команды "cl.exe ...".