利用Python将py文件编译成so文件

冷不防 2022-10-31 10:56 591阅读 0赞

利用Python将py文件编译成so文件

    1. 缘由
    1. 办法
    • 2.1. 软件环境
    • 2.2. 源文件
    • 2.3. setup.py
    • 2.4. 执行编译
    • 2.5. 使用
    • 2.6. inplace

1. 缘由

Python的解释特性是将py编译为独有的二进制编码pyc文件
然后对pyc中的指令进行解释执行
但是pyc的反编译却非常简单,可直接反编译为源码
正所谓“防人之心不可无”
当需要将产品发布到外部环境的时候,源码的保护尤为重要


2. 办法

可以先将py转换为c,然后编译cso文件


2.1. 软件环境

安装 cython

  1. $ pip3 install cython

2.2. 源文件

py_to_so文件夹下新建test.py文件待编译,内容如下:

  1. class TEST:
  2. def hello():
  3. print('Hello CSDN!')

2.3. setup.py

py_to_so文件夹下新建setup.py文件,内容如下:

  1. from distutils.core import setup
  2. from Cython.Build import cythonize
  3. setup(ext_modules = cythonize(["test.py"]))

2.4. 执行编译

py_to_so文件夹下执行编译

  1. $ 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文件一样导入使用

  1. $ cd build/lib.linux-x86_64-3.8
  2. $ python3
  3. $ from test import TEST
  4. $ TEST.hello()
  5. # Hello CSDN!

在这里插入图片描述


2.6. inplace

  1. $ python3 setup.py build_ext --inplace

–inplaceignore build-lib and put compiled extensions into the source directory alongside your pure Python modules
忽略build-lib,将编译后的扩展放到源目录中,与Python模块放在一起
在这里插入图片描述


文中所提文件已在 CSDN代码 codechina py_to_so 中


谢谢

发表评论

表情:
评论列表 (有 0 条评论,591人围观)

还没有评论,来说两句吧...

相关阅读