- 緣由
Python的解釋特性是將py編譯為獨有的二進位制編碼pyc檔案 然後對pyc中的指令進行解釋執行 但是pyc的反編譯卻非常簡單,可直接反編譯為原始碼 正所謂「防人之心不可無」 當需要將產品釋出到外部環境的時候,原始碼的保護尤為重要 2. 辦法
可以先將py轉換為c,然後編譯c為so檔案 2.1. 軟體環境
安裝 cython
$ pip3 install cython
2.2. 原始檔
在py_to_so資料夾下新建test.py檔案待編譯,內容如下:
class TEST: def hello(): print('Hello CSDN!')
2.3. setup.py
在py_to_so資料夾下新建setup.py檔案,內容如下:
from distutils.core import setup from Cython.Build import cythonize
setup(ext_modules = cythonize(["test.py"]))
2.4. 執行編譯
在py_to_so資料夾下執行編譯
$ python3 setup.py build_ext
在這裡插入圖片描述 執行後會生成build資料夾,如下: 在這裡插入圖片描述
lib.linux-x86_64-3.8資料夾下的test.cpython-38-x86_64-linux-gnu.so就是想要的.so檔案
在這裡插入圖片描述 2.5. 使用
現在so檔案就可以像普通py檔案一樣匯入使用
$ cd build/lib.linux-x86_64-3.8 $ python3 $ from test import TEST $ TEST.hello()
在這裡插入圖片描述 2.6. inplace
$ python3 setup.py build_ext --inplace
–inplace:ignore build-lib and put compiled extensions into the source directory alongside your pure Python modules 忽略build-lib,將編譯後的擴充套件放到源目錄中,與Python模組放在一起 在這裡插入圖片描述