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?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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:Python31python.exe C:Python31Scriptscython.py smalltest1.py --embed cl.exe /nologo /Ox /MD /W3 /GS- /DNDEBUG -Ic:Python31include -Ic:Python31PC /Tcsmalltest1.c /link /OUT:"test.exe" /SUBSYSTEM:CONSOLE /MACHINE:X86 /LIBPATH:c:Python31libs /LIBPATH:c:Python31PCbuild
Method 2
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.
Method 3
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
Method 4
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:
-
Replace all the
main()function in the “.c” file made bycython --embedwithwmain() -
Add
/subsystem:windows /entry:wmainCRTStartupto the end ofcl.exe ...command
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0