Может ли Cython компилироваться в EXE? - PullRequest
46 голосов
/ 06 апреля 2010

Я знаю, какова цель Cythons. Это написать скомпилированные расширения C на Python-подобном языке, чтобы ускорить ваш код. Что я хотел бы знать (и не могу найти, используя мой google-fu), так это то, что Cython может каким-то образом компилироваться в исполняемый формат, так как он, кажется, уже разбивает код python на C.

Я уже использую Py2Exe, который является просто упаковщиком, но мне интересно использовать его для компиляции чего-то, что немного сложнее распаковать (все, что упаковано с помощью Py2EXE, может быть просто извлечено с использованием 7zip, который мне не нужен)

Кажется, если это , а не , возможно, что моей следующей альтернативой будет просто скомпилировать весь мой код и загрузить его как модуль, а затем упаковать его, используя py2exe, по крайней мере, получив большинство из мой код в скомпилированную форму, верно?

Ответы [ 4 ]

42 голосов
/ 30 апреля 2010

Вот вики-страница по встраиванию 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
29 голосов
/ 06 апреля 2010

В принципе, представляется возможным сделать что-то вроде того, что вы хотите, в соответствии с Embedded Pyrex HOWTO . (Pyrex фактически является предыдущим поколением Cython.)

Хм ... это имя предлагает лучший поиск, чем я пытался в первый раз: "встраивание cython" приводит к этой странице , которая звучит так, как вы хотите.

1 голос
/ 30 сентября 2018

Я успешно использовал 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
0 голосов
/ 21 мая 2018

Ответ афтершока хорош, я хочу сказать о запуске приложения без консоли. Больше всего похоже на ответ Aftershock, если вы хотите, чтобы ваше приложение запускалось без консоли, важны два момента:

  1. заменить все функции main () в файле ".c", созданные с помощью "cython --embed", на wmain ();

  2. добавить / ссылка / подсистема: windows / запись: wmainCRTStartup до конца команды "cl.exe ...".

...