pyinstaller
-
安装pyinstaller
pip install pyinstaller
-
打包
- 打包成单个文件
pyinstaller -F --clean *.py
- 打包成多个文件
pyinstaller -D --clean *.py
注意: 为了避免打包文件过大, 强烈建议将代码中的import *之类的语法改成按需引入, 不然可能会把整个package打包进来.
- 打包成单个文件
PyPI
待更新
cython(Linux环境)
-
安装cython
pip install cython
-
用cython将python代码转换成c语言代码: 在对应的目录进入终端
cython *.py
如果*处提供了具体的文件名, 那么只会产生一个c语言文件, 否则会将目录下的所有python代码转换成c语言并输出.
-
利用GCC进行编译
gcc -c -fPIC -I/PATH/ *.c gcc -shared *.o -o *.so
- 其中PATH为系统中Python.h所在的目录, 一般在系统python目录中的include中. 如使用Anaconda的话目录为
home/USERNAME/anaconda3/include/python3.7m/
(仅供参考, 可能与具体情况不同) - 其中*为具体的c语言文件名字
- 其中PATH为系统中Python.h所在的目录, 一般在系统python目录中的include中. 如使用Anaconda的话目录为
-
随后便可得到多个编译好的动态库so文件, 使用时像正常python包import进入代码随后调用各方法即可(可以无损替换).
以下为顺带一提的加密方法
混淆
如oxyry等网站可以在线混淆代码, 大大降低代码的可读性, 而不影响代码的实际业务功能, 但其实没有特别大的加密作用.
# 混淆前
a = 'a'
_b = 'b'
def foo():
print(a)
def _bar():
print(_b)
foo()
_bar()
# 混淆后
a ='a'#line:1
_OO0OO000O00OO0OOO ='b'#line:2
def foo ():#line:4
print (a )#line:5
def _OOOOOO0O00000OOO0 ():#line:7
print (_OO0OO000O00OO0OOO )#line:8
foo ()#line:10
_OOOOOO0O00000OOO0 ()#line:11
其实还可以根据混淆后的结果再一次手动对部分函数名, 变量名进行混淆, 但一定要随时保存副本不然很难还原回去.
PyArmor
-
首先安装PyArmor
pip install pyarmor
-
命令
obfuscate
用来加密脚本。最常用的一种情况是切换到脚本 myscript.py 所在 的路径,然后执行:pyarmor obfuscate myscript.py
*PyArmor 会加密 myscript.py 和相同目录下面的所有 .py 文件:
* 在用户根目录下面创建 .pyarmor_capsule.zip (仅当不存在的时候创建) * 创建输出子目录 dist * 生成加密的主脚本 myscript.py 保存在输出目录 dist * 加密相同目录下其他所有 *.py 文件,保存到输出目录 dist * 生成运行加密脚本所需要的全部辅助文件,保存到输出目录 dist
具体使用方式可以参见PyArmor文档