52

我知道 Cythons 的目的是什么。它是用类似 Python 的语言编写可编译的 C 扩展,以便在您的代码中产生加速。我想知道(并且似乎无法使用我的 google-fu 找到)是 Cython 是否可以以某种方式编译成可执行格式,因为它似乎已经将 python 代码分解为 C。

我已经使用 Py2Exe,它只是一个打包程序,但我有兴趣使用它来编译成更难解包的东西(使用 Py2EXE 打包的任何东西基本上都可以使用我不想要的 7zip 提取)

看来如果这不可能,我的下一个选择就是编译我的所有代码并将其作为一个模块加载,然后使用 py2exe 将其打包,至少将我的大部分代码转换为编译形式,对吧?

4

4 回答 4

45

这是关于嵌入 cython 的 wiki 页面

假设你安装了 pythonC:\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
于 2010-04-30T09:12:40.487 回答
30

根据Embedding Pyrex HOWTO ,原则上似乎可以做你想做的事情。(Pyrex 实际上是上一代 Cython。)

嗯......这个名字暗示了比我第一次尝试更好的搜索:“嵌入 cython”导致这个页面听起来像你想要的。

于 2010-04-05T23:47:51.137 回答
4

我已成功使用 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
于 2018-09-30T07:36:39.843 回答
1

余震的回答很好,我想说的是关于在没有控制台的情况下运行应用程序。最像 Aftershock 的回答,如果您希望您的应用程序在没有控制台的情况下运行,有两点很重要:

  1. main()将“.c”文件中的所有函数替换cython --embedwmain()

  2. 添加/subsystem:windows /entry:wmainCRTStartupcl.exe ... 命令末尾

于 2018-05-21T15:50:20.473 回答