web-dev-qa-db-fra.com

Cython peut-il compiler un fichier EXE?

Je sais ce que le but de Cythons est. C'est écrire des extensions C compilables dans un langage similaire à Python afin de produire des accélérations dans votre code. Ce que j'aimerais savoir (et que je n'arrive pas à trouver en utilisant mon google-fu), c'est si Cython peut être compilé en un format exécutable puisqu'il semble déjà décomposer le code python en C.

J'utilise déjà Py2Exe, qui n'est qu'un emballeur, mais je voudrais utiliser ceci pour compiler quelque chose qui est un peu plus difficile à décompresser (tout ce qui est compressé avec Py2EXE peut simplement être extrait avec 7Zip, ce que je ne souhaite pas).

Il semble que si cela est non possible, ma prochaine alternative serait simplement de compiler tout mon code et de le charger en tant que module, puis de le conditionner avec py2exe, pour obtenir au moins le plus de mon code sous une forme compilée, à droite ?

41
ThantiK

En principe, il semble possible de faire quelque chose comme ce que vous voulez, selon le Intégration de Pyrex HOWTO . (Pyrex est effectivement une génération précédente de Cython.)

Hmm ... ce nom suggère une meilleure recherche que celle que j'avais précédemment essayée: "incorporation de cython" mène à cette page qui sonne comme vous le souhaitez.

29
Peter Hansen

Voici la page wiki sur l'intégration de cython

En supposant que vous avez installé python avec C:\Python31 et que vous souhaitez utiliser Microsoft Compiler.

smalltest1.py - est le fichier que vous voulez compiler.

test.exe - nom de l'exécutable.

Vous devez définir les variables d'environnement pour 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
40
Aftershock

J'ai utilisé avec succès Cython & gcc pour convertir le fichier * .py en * .exe, avec le fichier de commandes ci-dessous:

# 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
PANDA