2010-04-05 203 views
39

我知道Cythons的目的是什麼。它是用類Python語言編寫可編譯的C擴展,以便在代碼中產生加速。我想知道的(似乎無法找到使用我的谷歌福)是如果Cython可以以某種方式編譯成可執行格式,因爲它已經好像將python代碼拆分爲C。可以Cython編譯爲EXE嗎?

我已經使用Py2Exe ,它只是一個包裝者,但有興趣使用它來編譯下來有點難以解壓的東西(使用Py2EXE打包的任何東西基本上都可以使用我不想要的7zip提取)

看起來如果這是不是可能我的下一個選擇只是編譯我所有的代碼並將其作爲模塊加載,然後使用py2exe打包,至少將我的代碼的大部分編譯爲編譯形式,對吧?

回答

28

原則上,根據Embedding Pyrex HOWTO,似乎可以按照自己的意願進行操作。 (Pyrex實際上是Cython的上一代產品)

嗯......這個名字暗示比我第一次嘗試更好的搜索:「嵌入cython」導致this page這聽起來像你想要的。

+5

請參閱我的示例,瞭解如何爲Linux系統完成[此處](http://stackoverflow.com/a/22040484/2198548)。 – 2014-02-26 11:58:12

38

Here's the wiki page on embedding cython

假設你安裝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 
+0

Waw,它工作得很好。最後,.exe文件非常小。這真是一個'cython2exe',類似於'py2exe'! 我們可以做一個自動執行此操作的腳本(適應當前安裝的Python版本等)嗎? 我們需要用這個.exe文件發送什麼文件? – Basj 2014-02-09 11:39:06

+0

如何修改這個沒有控制檯應用程序,而是一個帶有GUI的Windows應用程序(不需要黑色控制檯窗口)?我嘗試了'/ SUBSYSTEM:WINDOWS',而不是'解析外部符號_WinMain @ 16'錯誤... – Basj 2014-02-09 17:24:41

+0

我收到錯誤'忽略未知選項/ main.c',' 缺少源文件名' – 2014-11-27 00:11:10