Can Cython compile to an EXE?

PythonCompilationCython

Python Problem Overview


I know what Cythons purpose is. It's to write compilable C extensions in a Python-like language in order to produce speedups in your code. What I would like to know (and can't seem to find using my google-fu) is if Cython can somehow compile into an executable format since it already seems to break python code down into C.

I already use Py2Exe, which is just a packager, but am interested in using this to compile down to something that is a little harder to unpack (Anything packed using Py2EXE can basically just be extracted using 7zip which I do not want)

It seems if this is not possible my next alternative would just be to compile all my code and load it as a module and then package that using py2exe at least getting most of my code into compiled form, right?

Python Solutions


Solution 1 - Python

Here's the wiki page on embedding cython

Assuming you installed python to C:\Python31 and you want to use Microsoft Compiler.

smalltest1.py - is the file you want to compile.

test.exe - name of the executable.

You need to set the environmental variables for 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

Solution 2 - Python

In principal it appears to be possible to do something like what you want, according to the Embedding Pyrex HOWTO. (Pyrex is effectively a previous generation of Cython.)

Hmm... that name suggests a better search than I first tried: "embedding cython" leads to this page which sounds like what you want.

Solution 3 - Python

I have successfully used the Cython & gcc to convert the *.py file to *.exe, with below batch file:

# 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

Solution 4 - Python

Aftershock's answer is good, what I want to say is about run app without console. Most like Aftershock's answer, if you want your application run without console, two points are important:

  1. Replace all the main() function in the ".c" file made by cython --embed with wmain()

  2. Add /subsystem:windows /entry:wmainCRTStartup to the end of cl.exe ... command

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionThantiKView Question on Stackoverflow
Solution 1 - PythonAftershockView Answer on Stackoverflow
Solution 2 - PythonPeter HansenView Answer on Stackoverflow
Solution 3 - PythonPANDAView Answer on Stackoverflow
Solution 4 - PythonlonggangfanView Answer on Stackoverflow