python 通过将 py 文件转为 so 实现代码加密
这里介绍一种通过将 .py 代码转为.so 文件来做到某种意义上的加密的方法
前提提醒: 不同的操作系统环境中转 so 后只能在其相同的环境内执行,无法实现跨平台可用
单个文件转so:
把guaner.py
文件转为so
在guaner.py
的同级目录下新建一个setup.py
(名称可以自己定义,不一定要用 setup.py 命名)文件,文件的内容如下:
然后执行以下命令进行转 so
示例:创建完成后目录结构如下
然后执行命令开始转 so
生成的so
文件在build
目录下,找到guaner.cpython-310-darwin.so
就是转so
后的文件了
重点提醒: __init__.py
文件对转so
的影响
注意看到,为什么多了一个 jiami 目录?
首先看下我完整的文件目录结构:
这是我完整的目录结构,里面有个很关键的文件,test
目录下有__init__.py
,jiami
目录下也有__init__.py
,在转so
文件的时候,因为python
代码结构中,如果目录中存在__init__.py
,会把当前这个目录当作一个包,模块,可以被其他目录下代码引用,所以转so
的时候,会顺着__init__.py
所在的包结构,一层层的往上找,直到最后非python
模块的目录为止
因此打包完成后的目录结构就是这样的结构了:
现在去掉__init__.py
再打包看看结果
执行python setup.py build_ext
得到 so 文件目录如下
这样看,代码是不是就很符合自己的期望了,这样把文件so
文件分发到相同操作系统环境后,就可以放心执行不用担心别人可以查看我们的源代码了
现在我们可以做到单个文件转位so
了,那么我们是不是可以把当前的python
项目整体的所有代码全部转位so
文件了,这样发布给用户的时候,也不用担心看到我们的源代码了,下一章开始介绍打包整个python
项目
版权声明: 本文为 InfoQ 作者【关耳】的原创文章。
原文链接:【http://xie.infoq.cn/article/9644cb3920e5163c4ec19d958】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论