手动、自动实现python编译so动态库

一、目的:

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

二、编译步骤:

  1.将.py文件转换成.c文件

  2.将.c文件转换成.so文件

三、环境要求:

cython python模块、python-dev库、gcc、编译工具。

四、创建 hello.py

#-* -coding: UTF-8 -* -
__author__ = 'JiangJihai'

class test:
    def say(self):
        print 'hello'

五、创建build.py

from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize(["hello.py"]))

六、手动编译

1.通过python IDE 运行 build.py

手动、自动实现python编译so动态库_第1张图片

生成hello.c

2.通过gcc 编译成 so文件

gcc -c -fPIC -I C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\include test.c

gcc -shared test.o -o test.so

七、自动生成

python3 ./build.py build_ext --inplace

八、验证:

>>> import hello
>>> h = hello.test()
>>> h.say()
hello
>>> 

 

 

你可能感兴趣的:(手动、自动实现python编译so动态库)