pyarmor 是一个高安全性的 Python 脚本加密工具,从 v6.6.0 开始,提供了将加密脚本直接转换成为扩展模块或者可执行文件的功能,从而更进一步的提高了安全性。
确认已经安装 pyarmor
pip install pyarmor
点击这里下载 buildext.py,
查看脚本的命令行选项
python buildext.py -h
在 v6.6.0 之后,不需要下载 buildext
,可以直接使用下面的等价命令
python -m pyarmor.helper.buildext -h
首先加密脚本,必须使用 --no-cross-protection
和 --restrict 0
选项,否则运行时候会出现约束错误
pyarmor obfuscate --no-cross-protection --restrict 0 foo.py
转换所有在 dist
目录下面的加密脚本成为扩展模块
python buildext.py dist/
ls dist/
选项 -i
可以在转换成为扩展模块之后把相应的加密脚本直接删除,这样dist
目录下面就只有相应的扩展模块,例如
python buildext.py -i dist/
ls dist/
需要注意的是
pytransform.py
或者 pytransform/__init__.py
成为扩展模块,但是这个模块是运行加密扩展模块必须的,如果也想把这个脚本转换成为扩展模块,请使用 Cython
或者 Nuitka
等工具单独转换这个模块dist
下面的加密脚本被转换成为了扩展模块。如果需要递归操作,可以指定多个目录,例如python buildext.py dist/ dist.pkg/
或者在命令行列出所有文件,例如# 在 Linux 平台
python buildext.py $(find dist/ -name "*.py")
# 在 Windows 平台
FOR /R dist\ %I IN (*.py) DO python buildext.py %I
if __name__ == '__main__':
如果需要运行if __name__ == "__main__":
这个语句块,那么需要使用选项 -e
转换加密脚本成为可执行文件
python buildext.py -e dist/foo.py
dist/foo.exe
需要注意的是
--no-cross-protection
和 --restrict 0
选项python foo.py
有两个常用工具 Cython
和 Nuitka
也可以将Python脚本转换成为扩展模块,和它们比较,pyarmor
的转换方式有如下不同
from pytransform import pyarmor
pyarmor(__name__, __file__, b'xxxxxx', 2)
真正的脚本执行还是由 pyarmor
来完成,所以有的脚本使用 Cython
或者 Nuitka
转换成为扩展模块之后运行不正常,但是使用 pyarmor
转换过去之后可以正常运行。