4. 命令手册
4.1. pyarmor init
在当前目录创建工程,修改工程和显示工程信息
- 语法
[1] pyarmor init -h
[2] pyarmor init [-C] [-s PATH] [-x PATTERN] [-r]
[3] pyarmor init [-e FILE] [-m FILE] [-p PATH]
[4] pyarmor init
说明
- 选项
- -s PATH, --src PATH
工程源路径,相对路径或者绝对路径,默认值是当前路径
- -x PATTERN, --exclude PATTERN
搜索工程源路径的时候排除匹配的文件或者目录,使用 fnmatch 的格式进行匹配
该选项可以使用多次,任何一个模式匹配的文件都会被排除在工程之外
模式可以包含通配符,匹配任意目录下面的文件或者目录名称,例如:
__pycache__ config.py test_*.py data*
如果需要匹配指定包下面的文件和目录,使用包前缀模式,例如:
pkgname:test_*.py pkgname:config
- -e FILE, --entry FILE
指定工程脚本,相对路径或者绝对路径的文件,可以使用多次指定多个脚本
如果是相对路径的话,总是相对于当前路径,例如:
$ pyarmor init --src ../joker -e ../joker/card.py
支持使用通配符,如果使用通配符的话,必须使用引号,例如:
$ pyarmor init --src ../joker -e "../joker/*.py"
脚本是不会被工程中其他任何其他模块导入的模块
- -p PATH, --package PATH
指定包所在的路径,相对路径或者绝对路径,可以使用多次指定多个包
相对路径和通配符的使用方法和
-e
相同包的默认名称是最后一级的路径名称,例如,添加包 joker 到工程:
$ pyarmor init -p lib/joker
如果包名称和路径名称不一致,使用后缀 @pkgname 指定包名称,例如:
$ pyarmor init -p lib/src@joker
- -r, --recursive
搜索工程目录下面的模块和包的模式,没有指定该选项,则不会搜索工程目录
- -C, --clean
在创建工程之前,清空原来的工程设置,创建一个空白工程
一般用于当前目录之前已经创建了工程,需要重新设置工程信息
- 用法
创建一个新的工程,增加当前路径下面的所有脚本和目录到工程中:
$ pyarmor init -r
需要把文件或者目录排除在工程之外,使用下面的方式:
$ pyarmor init --exclude venv --exclude "test*.py"
如果当前目录已经创建了工程,该命令也可以显示当前工程配置:
$ pyarmor init
查看工程中包含的所有脚本和模块:
$ pyarmor build --list
重新创建工程,只包含一个脚本:
$ pyarmor init -C -e foo.py
使用
-C
,会删除原来所有的工程设置,否则仅仅修改工程设置创建工程之后,也可以使用命令 pyarmor env 修改工程配置
- 示例
下面的所有示例中都假定当前目录还没有创建工程
创建一个工程,包含当前目录下面的所有脚本和所有子目录:
$ pyarmor init -r
和上例类似,但是排除目录 venv 和所有 test 开头的脚本:
$ pyarmor init -r --exclude venv --exclude "test*.py"
修改当前工程的路径,需要使用选项
-C
清除原来的工程路径:$ pyarmor init -C --src another/src -r
创建一个工程,包含其他目录下面的所有脚本和目录:
$ pyarmor init -s eke/src -r
创建包含单独一个脚本的工程:
$ pyarmor init -e foo.py
创建包含单独一个模块的工程:
$ pyarmor init -m fibo.py
创建单独一个包 joker 的工程,包路径在当前目录下面的子目录 joker:
$ pyarmor init -p joker
创建单独一个包 joker 的工程,包路径在当前目录下面的 joker/src:
$ pyarmor init -p joker/src@joker
创建包含多个包的工程,在不同目录:
$ pyarmor init -p mypkg -p lib/mypkg1 -p lib/mypkg2
创建包含脚本,模块以及包的工程:
$ pyarmor init -e main.py -m lib/*.py -p lib/mypkg
4.2. pyarmor env
用于修改 Pyarmor 所有配置选项和工程设置
Pyarmor 的配置有三个域:
全局域
本地域
工程域
每一个域都有若干节,每一节中有若干配置选项
对于相同的配置选项,其优先级是工程域 > 本地域 > 全局域
默认是本地域,所有选项和节请参考 配置选项
- 语法
[5] pyarmor env -h
[6] pyarmor env [-l | -g | -p] info [NAME]
[7] pyarmor env [-l | -g | -p] get OPTION
[8] pyarmor env [-l | -g | -p] set OPTION VALUE
[9] pyarmor env [-l | -g | -p] reset OPTION
[10] pyarmor env [-l | -g | -p] [pop | push] OPTION VALUE ...
[11] pyarmor env [-l | -g | -p]
说明
[5] 显示命令帮助
[6] 显示可用选项和节,以及选项的使用用法
[7] 显示选项的值
[8] 设置选项的值
[9] 清除选项设置,恢复到默认值
[10] 增加或者删除列表选项中的一个或者多个值
[11] 进入交互命令模式
- 选项
- -l, --local
查看和修改本地域的选项设置:
$ pyarmor env -l (local) ls
- -g, --global
查看和修改全局域的选项设置:
$ pyarmor env -g (global)
- -p, --project
查看和修改工程的选项设置:
$ pyarmor env -p (project)
- info
显示可用的节和选项,当前选项的设置,以及选项的使用方法
例如,查看工程域的所有选项和节,以及选项的当前值:
$ pyarmor env -p info Sections: rft Options: src scripts modules packages excludes recursive ...
显示工程域中选项 excludes 的用法和当前设置:
$ pyarmor env -p info excludes
显示工程域中的节 rft 中所有选项和选项的设置:
$ pyarmor env -p info rft
显示工程域中的节 rft 中选项 argument_mode 的设置和使用方法:
$ pyarmor env -p info rft:argument_mode
- get
get 用于查看选项的值,例如:
$ pyarmor env -p get excludes
OPTION 也可以使用 SECTION:OPTION 的格式,例如:
$ pyarmor env -p get rft:argument_mode
- set 和 reset
set 用于设置选项的值,reset 用于恢复选项的默认值,例如:
$ pyarmor env -p set recursive 1 $ pyarmor env -p set rft:argument_mode 0 $ pyarmor env -p reset recursive $ pyarmor env -p reset rft:argument_mode
- push 和 pop
push 和 pop 用于修改列表型选项,增加或者删除一个或者多个值
例如向工程选项 excludes 中增加一个新的值:
$ pyarmor env -p push excludes "test*.py"
同时增加多个值:
$ pyarmor env -p push excludes venv test
如果值中包含空格,需要使用引号,例如:
$ pyarmor env -p push excludes "test 2" "venv 2"
删除一个值:
$ pyarmor env -p pop excludes "test*.py"
- 交互模式
直接执行命令而没有参数的话,会进入交互模式。例如:
$ pyarmor env -p (project)
输入 ? 然后在键入 Enter ,显示所有可用的交互命令:
(project) ? cd exit get help info ls pop push reset set use (project)
表-2. 交互命令表 命令
功能
示例
?
显示命令帮助
显示命令 ls 的用法:
(project) ? ls
use
切换不同的域
切换到全局域,然后切换回到工程域:
(project) use global (global) use project (project)
ls
列出当前可用的选项和节
查看工程域中的选项和节:
(project) ls Sections: rft Options: src scripts modules packages excludes recursive
cd
切换到不同的组
进入到组 rft,然后在返回上一级:
(project) cd rft (project)[rft] cd .. (project)
get
显示选项的值
显示工程选项 scripts 的值和所有已经设置的工程选项值:
(project) get scripts scripts = hanoi.py (project) get src = /Users/zhaojunde/eksuite/src scripts = hanoi.py
set
设置选项的值
设置工程选项 src 的值:
(project) set src /Users/zhaojunde/eksuite/src
reset
恢复选项的默认值
清除工程选项 src 的值:
(project) reset src
push
增加一个值或者多个值到列表类型的选项
增加脚本 foo.py 和 fibo.py 到工程脚本中:
(project) push scripts foo.py fibo.py (project) push scripts "foo.py" "fibo.py"
pop
从列表类型的选项中删除一个值或者多个值
从工程脚本中删除 fibo.py:
(project) pop scripts fibo.py
info
显示节中的选项,或者选项的用法
显示工程域的所有选项和节:
(project) info
显示节 rft 的所有选项:
(project) info rft
显示选项 argument_mode 的使用方法:
(project) cd rft (project)[rft] info argument_mode
4.3. pyarmor build
加密工程中的所有脚本,生成相应类型的加密脚本
- 语法
[12] pyarmor build -h
[13] pyarmor build [--mini | --rft | --mini-rft]
[14] pyarmor build [--autofix {0,1,2,3}]
[15] pyarmor build [--randname {0,1}]
说明
[12] 显示命令帮助
[13] 加密工程中所有脚本
[14] 启用或者禁用自动重构模式
[15] 启用随机名称重命名脚本
- --mini
构建工程,工程中的所有脚本都生成相应的迷你型加密脚本:
$ pyarmor build --mini
- --rft
构建工程,工程中的所有脚本都生成相应的重构型加密脚本:
$ pyarmor build --rft
- --mini-rft
构建工程,工程中的所有脚本首先进行重构,然后在生成相应的迷你型加密脚本:
$ pyarmor build --mini-rft
- --autofix {0,1,2,3}
该选项可自动生成重构规则,解决重构之后导致的脚本无法运行问题,共支持三种模式
模式 1 使用最简单,一般不需要人工增加规则,但是可能很多属性都没有重命名
模式 2 使用较为复杂的方式,大部分的属性都会重命名,但是有时候需要人工修改规则
模式 3 使用最麻烦,但是能够重命名绝大部分属性,一般必须要人工修改规则
基本的使用步骤是
首先启动自动重构模式,生成规则。例如:
$ pyarmor build --autofix 1
其次执行相应的构建命令:
$ pyarmor build --rft
然后运行重构后的脚本:
$ python dist/foo.py
根据出现的问题修正规则文件 .pyarmor/project/rft_autofix.rules
从第二步可以重新构建并执行,循环修正直到脚本运行没有问题
详细过程请参阅功能手册中的 使用自动修正模式重构复杂脚本
如果不需要使用自动重构模式,那么使用下面的命令:
$ pyarmor build --autofix 0
然后在重新进行构建:
$ pyarmor build --rft
- --randname {0,1}
默认情况下,重构后脚本中的名称是固定前缀和顺序号,例如:
pyarmor__1 = 1 pyarmor__2 = 'a'
如果启用随机名称,那么顺序号会替换成为随机名称,例如:
$ pyarmor build --randname 1 $ pyarmor build --rft $ cat dist/foo.py pyarmor20af2cdf6a = 1 pyarmor5688af382c = 'a'
如果需要禁用随机名称,那么:
$ pyarmor build --randname 0
然后重构工程:
$ pyarmor build --rft