Skip to content

Commit 1286f10

Browse files
committed
Refine doc
1 parent f298f35 commit 1286f10

File tree

5 files changed

+86
-130
lines changed

5 files changed

+86
-130
lines changed

pyarmor/docs/zh/proposals.rst

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -205,12 +205,24 @@ Pyarmor 提供 5 种不同的许可证模块
205205
适用范围
206206
========
207207

208-
重构功能是一个复合功能,需要满足下列条件:
208+
重构功能是一个复合功能,对于不同的脚本有一些具体的约束和要求
209209

210-
- 工程中所有使用到的模块可以被导入(支持设置额外的 Python 路径)
210+
1. 类的某一个方法名称如果必须要和基类中的方法名称一致,并且这个基类是外部类型。这就要求
211+
212+
- 该方法中有 super 函数调用,或者使用人工规则指定该方法名称不能被重命名
213+
- 基类可以被动态导入,或者人工配置该外部类型的所有属性
214+
215+
2. 对于未知属性,可以组合下列解决方案
216+
217+
- 在代码中使用 annotation 指定变量类型
218+
- 人工设定该变量的类型
219+
- 人工设定属性链的重命名规则
220+
- 直接修改脚本,规范变量名称,简化属性链重命名规则
221+
- 匹配当前模块内部的所有类定义,只要能匹配,就是该类(需要考虑外部基类的情况)
222+
- 人工列出模块使用到的外部类型,只要未知属性匹配任何一个外部类型,就认为无需要改变
211223

212224
下列情况无法自动进行重构,需要首先人工对代码进行重构
213225

214226
- 同一个函数内部,存在两个相同的属性链名称,但是有的属性需要重命名,有的不需要
215227

216-
解决方案:修改其中一个的变量名称
228+
解决方案:修改其中一个的变量名称,或者使用 annotation 指定任意一个变量类型

pyarmor/docs/zh/user/configuration.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ rft_option
165165
这里面列出的名称仅对模块内部定义的名称有效,对于导入的名称无效
166166

167167
参数和局部变量总是会被重命名,这里列出的名称对参数和局部变量不起作用
168-
* - rft_exclude_args
168+
* - rft_exclude_calls
169169
- 模式列表
170170
-
171171
- 这里面列出的函数名称,对应的参数都不进行重命名::

pyarmor/docs/zh/user/man.rst

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,7 @@ pyarmor build
421421

422422
[#]_ pyarmor build [--mini | --rft]
423423

424-
[#]_ pyarmor build [--autofix {0,1,2}]
424+
[#]_ pyarmor build [--autofix {0,1}]
425425

426426
[#]_ pyarmor build [--randname {0,1}]
427427

@@ -444,12 +444,10 @@ pyarmor build
444444

445445
$ pyarmor build --rft
446446

447-
.. option:: --autofix {0,1,2}
447+
.. option:: --autofix {0,1}
448448

449449
该选项可自动生成重构规则,解决重构之后导致的脚本无法运行问题
450450

451-
目前共支持两种不同的方式来自动生成重构规则
452-
453451
首先使用下面的命令启动自动重构模式::
454452

455453
$ pyarmor build --autofix 1

pyarmor/docs/zh/user/tutorials.rst

Lines changed: 64 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -25,35 +25,18 @@
2525

2626
$ cd project/src/
2727

28+
示例脚本的下载地址
29+
2830
安装和注册 Pyarmor
2931
==================
3032

3133
Pyarmor 发布在 PyPI 上面,使用下面的命令直接安装::
3234

3335
$ pip install pyarmor.cli
3436

35-
因为重构功能需要能够解锁不可逆加密的许可证,所以必须购买相应的许可证并进行注册。例如::
36-
37-
$ pyarmor reg pyarmor-regfile-5068.zip
38-
39-
...
40-
41-
INFO Python 3.11.0
42-
INFO Pyarmor 9.1.0 (pro), 005068, btarmor
43-
INFO Platform darwin.x86_64
44-
INFO Current license information:
45-
46-
License Type : pyarmor-pro
47-
License No. : pyarmor-vax-005068
48-
License To : Tester
49-
License Product : btarmor
37+
重构功能需要购买相应的许可证并进行注册
5038

51-
BCC Mode : Yes
52-
RFT Mode : Yes
53-
CI/CD Mode : No
54-
55-
Notes
56-
* Need verify license online when obfuscating scripts
39+
试用版和基础版许可证不包含重构功能,所以仅可以使用其中的部分功能
5740

5841
生成重构型脚本
5942
==============
@@ -81,12 +64,27 @@ Pyarmor 发布在 PyPI 上面,使用下面的命令直接安装::
8164
重构复杂脚本
8265
============
8366

84-
默认选项可以重构简单脚本,对于复杂脚本,重构之后脚本可能无法正确运行。例如::
67+
默认选项可以重构简单脚本,对于复杂脚本,重构之后脚本可能无法正确运行。
68+
69+
例如,我们重新创建一个包含复杂脚本 `fibo.py` 的新工程::
8570

8671
$ pyarmor init --clean -e fibo.py
72+
73+
当使用下面的命令生成重构型脚本的时候,最后会出现如下警告::
74+
8775
$ pyarmor build --rft
76+
...
77+
WARNING There are variables of unknown type
78+
WARNING There are function calls which may use unknown arguments
79+
WARNING Please check file ".pyarmor/project/rft_unknowns.json"
80+
...
81+
82+
运行重构脚本会报错::
83+
8884
$ python dist/fibo.py
8985

86+
AttributeError: 'pyarmor__7' object has no attribute 'run'
87+
9088
这时候可以使用下面的命令自动生成额外的重构规则::
9189

9290
$ pyarmor build --autofix 1
@@ -99,6 +97,14 @@ Pyarmor 发布在 PyPI 上面,使用下面的命令直接安装::
9997

10098
$ python dist/fibo.py
10199

100+
使用上面的方法生成的重构规则会保留所有未知的属性,也就是说,如果不能确定某一个属性是否需要重命名,那么所有脚本中和该属性重名的名称都保留不变
101+
102+
如果需要重命名所有类方法和属性,可以清除上面生成的规则::
103+
104+
$ pyarmor build --autofix 0
105+
106+
然后根据需要人工配置重构规则,但是这需要学习和了解重构规则的使用方法,详细内容请参考后面高级重构功能
107+
102108
生成迷你型脚本
103109
==============
104110

@@ -165,18 +171,16 @@ Pyarmor 发布在 PyPI 上面,使用下面的命令直接安装::
165171
- 如果该名称是一个类,那么类的属性和方法,都不会进行重命名
166172
- 如果该名称是一个函数,那么函数的参数也不会进行重命名
167173

168-
另外一种方式是使用配置选项 `rft_exclude_names` 输出类和函数等,这里面列出的类和函数也不会进行重命名::
174+
另外一种方式是直接指定需要输出类和函数::
169175

170-
$ pyarmor env -p push rft_option:rft_exclude_names \
176+
$ pyarmor env -p set rft_option:rft_auto_export tomjson.decoder:JSONDecoder
177+
$ pyarmor env -p push rft_option:rft_auto_export \
171178
tomjson:load tomjson:loads tomjson:dump tomjson:dumps
172179

173-
和 ``__all__`` 输出方式相比较, `rft_exclude_names` 中的名称必须是模块内部定义的名称,而不能是导入的名称,例如::
180+
需要注意的是,`rft_auto_export` 中的名称必须是模块内部定义的名称,而不能是导入的名称,例如::
174181

175182
# 错误,JSONDecoder 并没有在 tomjson/__init__.py 中被定义,只是被导入进来使用
176-
$ pyarmor env -p push rft_option:rft_exclude_names tomjson:JSONDecoder
177-
178-
# 正确,JSONDecoder 是在 tomjson/decoder.py 中定义
179-
$ pyarmor env -p push rft_option:rft_exclude_names tomjson.decoder:JSONDecoder
183+
$ pyarmor env -p set rft_option:rft_auto_export tomjson:JSONDecoder
180184

181185
然后重构整个包::
182186

@@ -197,9 +201,11 @@ Pyarmor 发布在 PyPI 上面,使用下面的命令直接安装::
197201

198202
$ pyarmor init --clean --src . --exclude fibo.py --exclude venv
199203

200-
不使用选项 :option:`--entry`, :option:`--module` 以及 :option:`--package` 来指定工程包含的脚本,模块和包的话,会自动搜索 :option:`--src` 下面的文件和目录,把发现的模块和包自动增加到工程中
204+
该命令会自动搜索 :option:`--src` 下面的文件和目录,把发现的模块和包自动增加到工程中
205+
206+
查看工程包含的所有项目::
201207

202-
而一旦使用了任何一个选项指定了脚本,模块或者包,就不会进行自动搜索,只有指定的脚本,模块和包会添加到工程中
208+
$ pyarmor build --list
203209

204210
重构整个工程::
205211

@@ -209,8 +215,8 @@ Pyarmor 发布在 PyPI 上面,使用下面的命令直接安装::
209215

210216
$ python dist/jsontool.py
211217

212-
解决重构的常见问题
213-
==================
218+
高级重构功能
219+
============
214220

215221
对于复杂脚本,使用默认选项生成的重构型脚本,运行的时候主要会出现两种类型的问题
216222

@@ -221,50 +227,20 @@ Pyarmor 发布在 PyPI 上面,使用下面的命令直接安装::
221227

222228
AttributeError: 'pyarmor__7' object has no attribute 'run'
223229

224-
除了上文中提到的方法外,还可以使用下面的配置方法来解决
230+
除了上文中提到的自动生成重构规则的方法之外,还可以通过人工配置规则的方式来解决
225231

226232
属性名称不存在
227233
--------------
228234

229-
如果提示属性名称 ``xxxx`` 不存在,可以增加规则,不重命名该属性::
235+
如果提示属性名称 ``xxxx`` 不存在,最简单的方式是直接增加排除规则,不重命名该属性::
230236

231237
$ pyarmor env -p set rft_option:rft_exclude_names xxxx
232238

233239
这样可以简化配置,但是可能造成更多的名称没有被重命名
234240

235-
函数参数名称不存在
236-
------------------
237-
238-
如果错误提示是参数名称不存在,那么可以直接禁用重命名参数::
239-
240-
$ pyarmor env -p set rft_option:rft_argument 0
241+
另外一种方式,是对出现问题的属性进行单独配置
241242

242-
或者也可以仅重命名 posonly 参数和 vararg 和 kwarg 参数::
243-
244-
$ pyarmor env -p set rft_option:rft_argument 1
245-
246-
然后在重新加密脚本,这样可以简化配置,但是大部分参数可能没有被重命名
247-
248-
重构规则的使用示例
249-
------------------
250-
251-
我们以脚本 `fibo.py` 为例,首先创建仅包含该脚本的工程::
252-
253-
$ pyarmor init --clean -m fibo.py
254-
255-
当使用下面的命令生成重构型脚本的时候,最后会出现如下警告::
256-
257-
$ pyarmor build --rft
258-
259-
WARNING There are variables of unknown type
260-
WARNING There are function calls which may use unknown arguments
261-
WARNING Please check file ".pyarmor/project/rft_unknowns.json"
262-
263-
第一个警告::
264-
265-
WARNING There are variables of unknown type
266-
267-
是因为在脚本 `fibo.py` 中,有如下的代码块:
243+
例如在脚本 `fibo.py` 中,有如下的代码块:
268244

269245
.. code-block:: python
270246
@@ -274,11 +250,9 @@ Pyarmor 发布在 PyPI 上面,使用下面的命令直接安装::
274250
obj.run()
275251
return obj.result
276252
277-
因为参数 `obj` 的类型不确定,所以默认情况是不会对其属性进行重命名,这样可能会导致问题。
278-
279-
解决方案有两种,
253+
因为参数 `obj` 的类型不确定,所以默认情况是不会对其属性进行重命名,这样运行的时候会导致问题属性找不到的问题。
280254

281-
一是使用 annotation 指定变量类型,例如:
255+
一种解决方案是使用 annotation 指定变量类型,例如:
282256

283257
.. code-block:: python
284258
@@ -288,19 +262,28 @@ Pyarmor 发布在 PyPI 上面,使用下面的命令直接安装::
288262
obj.run()
289263
return obj.result
290264
291-
一是不修改脚本,使用规则指定变量类型。例如,执行下面的命令配置规则::
265+
另外一种解决方案是不修改脚本,使用规则指定变量类型。例如::
292266

293267
$ pyarmor env -p push rft_option:var_type_table "fibo:fib.obj QuickFibo"
294268

295-
其中,后者特别适用于类型定义不在当前模块,而是在其他模块,例如::
269+
配置新规则之后,需要重新构建工程::
296270

297-
$ pyarmor env -p push rft_option:var_type_table "fibo:fib.obj foo:QuickFibo"
271+
$ pyarmor build --rft
298272

299-
第二个警告::
273+
函数参数名称不存在
274+
------------------
300275

301-
WARNING There are function calls which may use unknown arguments
276+
如果错误提示是参数名称不存在,那么可以直接禁用重命名参数::
277+
278+
$ pyarmor env -p set rft_option:rft_argument 0
302279

303-
是因为在脚本 `fibo.py` 中,有如下的代码块:
280+
或者也可以仅重命名 posonly 参数和 vararg 和 kwarg 参数::
281+
282+
$ pyarmor env -p set rft_option:rft_argument 1
283+
284+
这样可以简化配置,但是大部分参数可能没有被重命名
285+
286+
另外一种方式是仅仅禁用某一个函数重命名参数,例如在脚本 `fibo.py` 中,有如下的代码块:
304287

305288
.. code-block:: python
306289
@@ -315,52 +298,11 @@ Pyarmor 发布在 PyPI 上面,使用下面的命令直接安装::
315298
316299
调用函数 `show` 的时候使用了参数 `kwarg` ,而字典的键值重构之后不会改变,而函数的参数名称都进行了重命名,所以运行重构后的脚本会导致出现参数不存在错误
317300

318-
解决方案之一是配置函数 `show` 的参数不能进行重命名,执行下面的命令进行配置::
319-
320-
$ pyarmor env -p rft_option:rft_exclude_args fibo:show
321-
322-
配置好之后,在重新构建工程::
301+
使用下面的命令配置函数 `show` 的参数不能进行重命名::
323302

324-
$ pyarmor build --rft
325-
$ cat dist/fibo.py
326-
$ python dist/fibo.py
327-
328-
高级重构模式
329-
------------
330-
331-
禁用自动重构模式以清除原来生成的规则::
332-
333-
$ pyarmor build --autofix 0
334-
335-
并再次生成重构规则::
336-
337-
$ pyarmor build --autofix 2
338-
339-
这条命令会自动生成一个配置文件 `.pyarmor/project/rft_autofix_rules.json`
340-
341-
这个配置里面包含了发生冲突的属性名称,需要人工修正配置
342-
343-
在上例中,它的内容如下:
303+
$ pyarmor env -p set rft_option:rft_argument 3
304+
$ pyarmor env -p push rft_option:rft_exclude_calls fibo:show
344305

345-
.. code-block:: bash
346-
347-
# The following variables type are unknown
348-
# Please replace "?" with variable type or "<any>"
349-
# "<any>" means not rename any attribute of this variable
350-
# pyarmor env -p rft_option:rft_attr_rules modname:scope:var.attr,*.?
351-
352-
如果某一个属性需要修改名称,那么,只需要把命令行前面的注释去掉,例如::
353-
354-
pyarmor env -p rft_option:rft_attr_rules modname:scope:var.attr,*.?
355-
356-
最后重新生成加密脚本::
306+
配置修改之后,需要重新构建脚本::
357307

358308
$ pyarmor build --rft
359-
360-
查看加密脚本::
361-
362-
$ cat dist/fibo.py
363-
364-
运行加密后的脚本::
365-
366-
$ python dist/fibo.py

pyarmor/learn/zh/how-to.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,9 @@
1818
如何解决加密过程中问题
1919
======================
2020

21+
pyarmor 启动失败
22+
----------------
23+
24+
2125
如何解决运行加密脚本时的错误
2226
============================

0 commit comments

Comments
 (0)