logo

py2so

王哲峰 / 2022-07-26


目录

对 Python 源代码进行加密(将.py文件编译为.so文件)

安装依赖库

$ sudo apt install python3-dev gcc
$ pip install cython

写一个测试 demo

新建加密脚本和测试脚本

$ mkdir script
$ cd script
$ touch TodayModule.py
$ touch main.py
$ touch setup.py

编译前测试文件夹目录

script
    ├── setup.py
    ├── main.py
    └── ToadyModule.py

编写测试文件脚本

# TodayModule.py

import datetime

class Today():
    def get_time(self):
        print(datetime.datetime.now())

    def say(self):
        print("Hello World!")
# main.py

from TodayModule import Today

t = Today()
t.get_time()
t.say()
# setup.py

from distutils.core import setup
from Cython.Build import cythonize

setup(ext_modules = cythonize(["TodayModule.py"]))

编译前测试

$ python3 main.py

编译前测试输出结果

2020-04-10 11:10:41.940473
Hello World!

编译加密

对脚本进行编译加密

$ cd ./py2so
$ python3 setup.py build_ext

生成文件夹目录

script
    ├── build
    │   ├── lib.linux-x86_64-3.7
    │   │   └── TodayModule.cython-37m-x86_64-linux-gnu.so
    │   └── temp.linux-x86_64-3.7
    │       └── TodayModule.o
    ├── setup.py
    ├── main.py
    ├── TodayModule.c
    └── TodayModule.py

运行加密后的文件

编译后测试

$ mv ./bulid/lib.lib.linux-x86_64-3.7/TodayModule.cython-37m-x86_64-linux-gnu.so .
$ rm -rf TodayModule.py
$ python3 main.py

编译后测试输出结果

2020-04-10 11:10:43.940473
Hello World!