歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Python 中使用 pyrex 生成 Linux 可執行文件

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

日期:2017/3/1 11:17:26   编辑: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. int main(int argc, char *argv[])
  6. {
  7. Py_Initialize();
  8. initgo(); // 這個地方的函數名字為init加上模塊名,就是原來那個py文件的名字
  9. c_add(2, 5);
  10. Py_Finalize();
  11. return 0;
  12. }
好了,現在編譯就是:

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