利用Python将py文件编译成so文件
利用Python将py文件编译成so文件
- 缘由
- 办法
- 2.1. 软件环境
- 2.2. 源文件
- 2.3. setup.py
- 2.4. 执行编译
- 2.5. 使用
- 2.6. inplace
1. 缘由
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()
# 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 中
谢谢
还没有评论,来说两句吧...