Cython可以编译成EXE吗?
我知道Cython的目的是什么。它是用一种类似Python的语言来编写可以编译的C扩展,以便让你的代码运行得更快。我想知道的是(我在网上找不到相关信息),Cython是否可以以某种方式编译成可执行文件,因为它似乎已经能够把Python代码转换成C代码了。
我现在使用Py2Exe,它只是一个打包工具,但我想用Cython来编译成一种更难被解压的格式(用Py2Exe打包的东西基本上可以用7zip轻松解压,而我不想这样)。
如果这不可能,我的下一个选择就是把我的所有代码编译成模块,然后用Py2Exe打包,这样至少可以把我大部分的代码变成编译后的形式,对吧?
4 个回答
6
我已经成功使用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
48
假设你已经把Python安装在了 C:\Python31
这个路径下,并且你想使用微软的编译器。
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
31
从原则上来说,似乎可以做你想要的事情,参考一下Embedding Pyrex HOWTO。 (Pyrex实际上是Cython的前身。)
嗯……这个名字让我想到一个更好的搜索方式:搜索“embedding cython”可以找到这个页面,听起来正是你想要的内容。