歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Python 中使用 pyrex 生成 Linux 可執行文件

這個問題是相當有意義的,如果有了比較好的方法,Python 完全可以用來開發商業軟件,而不用擔心源代碼洩露。

前兩天我在網上看了看,有很多的人在問這個問題。大部分的人都在用 py2exe,這是個對 Python 程序打包的東東,實際上只是在 Python 程序中找 出依賴的模塊,然後發布這個程序。好處在於可以讓這個程序脫離 Python 的環境來執行,不用安裝 Python 解釋器。但實際上並不能保護源代碼,因為源 代碼其實也包含在其中了。更好的辦法是使用 Pyrex。在 http: //www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ 可以下載到。本來 Pyrex 是一個用來混合 編寫 Python 和 C 程序的東西,然後轉換為 C 代碼,再編譯成可執行文件。於是這裡就相當於提供了一種方法可以將 Python 代碼轉換為 C 代碼,這樣就可 以把 Python 程序編譯為真正的可執行文件了!下面說說怎麼做。假設我們有一個簡單的 Python 程序,代碼如下,假設文件名為 go.py。

  1. def add(a, b):  
  2.     print a+b # 為了方便看到函數調用,輸出一下   
  3.     retur a+b  
僅僅做一個簡單的加法操作。那我們想把它編譯為可執行文件的話,需要進行以下幾步:
1.修改 go.py 文件,在裡面添加一個 c 函數,當然要用 Pyrex 的語法,用這個函數來調用 Python 程序的入口函數(在這裡就是 add 了)。修改 go.py 為 go.pyx。
在這裡就是添加一個:
  1. cdef public int c_add(int a, int b):  
  2.     return add(a, b)  
2.添加一個頭文件 go.pxi, 讓主函數能找到 go.py 裡的 C 函數的申明
  1. cdef extern int (c_add(int, int))  
3.編寫一個主函數文件 main.c,在該主函數中包含 go.h (這個文件會自動生成), 並調用前面設計的 C 函數。
  1. #include <stdio.h>   
  2. #include <string.h>   
  3. #include <Python.h>   
  4. #include "go.h"   
  5.   
  6. int main(int argc, char *argv[])  
  7. {  
  8.     Py_Initialize();  
  9.   
  10.     initgo(); // 這個地方的函數名字為init加上模塊名,就是原來那個py文件的名字   
  11.     c_add(2, 5);  
  12.   
  13.     Py_Finalize();  
  14.     return 0;  
  15. }  
好了,現在編譯就是:

pyrexc go.pyx gcc go.c main.c -I/usr/include/python2.5 -L/usr/lib/ -lpython2.5 -o go

 就生成了叫 go 的可執行文件,執行它,就得到了想要的結果!注:此方法我只在 linux 上試過。(That's enough. - cloud)

Copyright © Linux教程網 All Rights Reserved