利用Python将py文件编译成so文件 1. 缘由2. 办法2.1. 软件环境2.2. 源文件2.3. setup.py2.4. 执行编译2.5. 使用2.6. inplace
1. 缘由
Python的解释特性是将py编译为独有的二进制编码pyc文件
然后对pyc中的指令进行解释执行
但是pyc的反编译却非常简单,可直接反编译为源码
正所谓“防人之心不可无”
当需要将产品发布到外部环境的时候,源码的保护尤为重要
可以先将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 setupfrom Cython.Build import cythonizesetup(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()# Hello CSDN! 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模块放在一起
文中所提文件已在 CSDN代码 codechina py_to_so 中
谢谢