2.5. 打包脚本的时候保护系统库
在 8.2 版本加入.
在 8.2.2 版本发生变更: 不在支持使用选项 --restrict
组合 --pack
来保护系统库。
Pyarmor 对使用 PyInstaller 打包进行发布的方式提供了特别的保护,这种模式下面可以对系统库进行加密和保护。其实现的思路就是把所有的依赖包也列出了进行加密。
下面是一个示例,说明如何加密一个脚本 foo.py
并同时保护系统依赖库.
我们需要使用 PyInstaller 提供的功能来列出 foo.py
所有的依赖库。
首先生成 foo.spec
:
$ pyi-makespec foo.py
然后修改这个 foo.spec
:
a = Analysis(
...
)
# Patched by Pyarmor to generate file.list
_filelist = []
_package = None
for _src in sort([_src for _name, _src, _type in a.pure]):
if _src.endswith('__init__.py'):
_package = _src.replace('__init__.py', '')
_filelist.append(_package)
elif _package is None:
_filelist.append(_src)
elif not _src.startswith(_package):
_package = None
_filelist.append(_src)
with open('file.list', 'w') as _file:
_file.write('\n'.join(_filelist))
# End of patch
接下来使用这个修改后的文件打包 foo.py
,同时生成包含所有依赖库的文件 file.list
:
$ pyinstaller foo.py
最后使用下面的选项加密脚本并重新打包:
$ pyarmor gen --assert-call --assert-import --pack dist/foo/foo foo.py @file.list
这个例子只是说明了基本的实现方法和步骤,请根据自己的实际情况编写自己的补丁脚本和使用必要的加密选项。如有必要,还可以人工修改生成的依赖库文件 file.list
2.6. 解决加密过程中编码错误
默认的脚本编码为 utf-8
,当加密脚本的时候出现编码错误,可以使用配置项指定正确的文件编码。例如下面的命令可以设置加密脚本使用的编码为 gbk
:
$ pyarmor cfg encoding=gbk
同样也可以为定制的错误消息文件 messages.cfg
指定编码。例如,使用下面的命令可以设置定制的错误消息文件使用的编码为 gbk
:
$ pyarmor cfg messages=messages.cfg:gbk
2.7. 删除脚本中 Docstring
使用下面的配置可以删除加密脚本中 DocString:
$ pyarmor cfg optimize 2
配置项 optimize
可用值和作用请参考 compile