我知道Cythons的目的是什么。它是用类似Python的语言编写可编译的C扩展,以便在代码中产生加速。我想知道的(并且似乎无法使用我的google-fu)是因为Cython可以以某种方式编译成可执行格式,因为它似乎已经将python代码分解为C。
我已经使用了Py2Exe,它只是一个打包器,但我有兴趣使用它来编译一些有点难以解压的东西(任何使用Py2EXE打包的东西基本上只能使用我不想要的7zip提取)
似乎这是不可能我的下一个替代方案就是编译我的所有代码并将其作为模块加载,然后使用py2exe打包,至少得到大多数我的代码编译成编译形式,对吧?
答案 0 :(得分:41)
Here's the wiki page on embedding 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
答案 1 :(得分:29)
根据Embedding Pyrex HOWTO,原则上似乎可以做你想要的事情。 (Pyrex实际上是上一代Cython。)
嗯......这个名字比我第一次尝试的搜索更好:“嵌入cython”会导致this page听起来像你想要的那样。
答案 2 :(得分:0)
我已成功使用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
答案 3 :(得分:-1)
余震的答案很好,我想说的是关于没有控制台的应用程序运行。最像Aftershock的回答,如果你想让你的应用程序在没有控制台的情况下运行,那么两点很重要:
将“cython --embed”生成的“.c”文件中的所有main()函数替换为wmain();
add / link / subsystem:windows / entry:wmainCRTStartup到“cl.exe ...”命令的结尾。