Skip to content

Commit 5306697

Browse files
committed
Refine docs
1 parent c3325d3 commit 5306697

File tree

4 files changed

+146
-141
lines changed

4 files changed

+146
-141
lines changed

pyarmor/docs/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<h3>Pyarmor Documentation</h3>
1313
<ul>
1414
<li><a href="en/index.html">English</a></li>
15-
<li><a href="zh/index.html">Chinese</a></li>
15+
<li><a href="zh/index.html">简体中文</a></li>
1616
</ul>
1717
<script>
1818
window.addEventListener('DOMContentLoaded', () => {

pyarmor/docs/zh/proposals.rst

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,3 +201,16 @@ Pyarmor 提供 5 种不同的许可证模块
201201
.. note::
202202

203203
试用版和基础版不支持生成嵌入型,虚拟嵌入型和重构型脚本,但是可以生成标准型,迷你型脚本,不过这些脚本都没有进行重构
204+
205+
适用范围
206+
========
207+
208+
重构功能是一个复合功能,需要满足下列条件:
209+
210+
- 工程中所有使用到的模块可以被导入(支持设置额外的 Python 路径)
211+
212+
下列情况无法自动进行重构,需要首先人工对代码进行重构
213+
214+
- 同一个函数内部,存在两个相同的属性链名称,但是有的属性需要重命名,有的不需要
215+
216+
解决方案:修改其中一个的变量名称

pyarmor/docs/zh/user/man.rst

Lines changed: 5 additions & 3 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}]
424+
[#]_ pyarmor build [--autofix {0,1,2}]
425425

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

@@ -444,9 +444,11 @@ pyarmor build
444444

445445
$ pyarmor build --rft
446446

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

449-
该选项可自动处理重构过程中无法识别的属性,简化重构脚本需要的额外配置
449+
该选项可自动生成重构规则,解决重构之后导致的脚本无法运行问题
450+
451+
目前共支持两种不同的方式来自动生成重构规则
450452

451453
首先使用下面的命令启动自动重构模式::
452454

pyarmor/docs/zh/user/tutorials.rst

Lines changed: 127 additions & 137 deletions
Original file line numberDiff line numberDiff line change
@@ -81,153 +81,23 @@ Pyarmor 发布在 PyPI 上面,使用下面的命令直接安装::
8181
重构复杂脚本
8282
============
8383

84-
对于简单脚本,使用默认选项可以正确重构脚本。但是对于复杂脚本,则需要额外的配置。
85-
86-
我们以脚本 `fibo.py` 为例,首先创建仅包含该脚本的工程::
87-
88-
$ pyarmor init --clean -m fibo.py
89-
90-
当使用下面的命令生成重构型脚本的时候,最后会出现如下警告::
91-
92-
$ pyarmor build --rft
93-
94-
WARNING There are variables of unknown type
95-
WARNING There are function calls which may use unknown arguments
96-
WARNING Please check file ".pyarmor/project/rft_unknowns.json"
97-
98-
第一个警告::
99-
100-
WARNING There are variables of unknown type
101-
102-
是因为在脚本 `fibo.py` 中,有如下的代码块:
103-
104-
.. code-block:: python
105-
106-
def fib(obj, n):
107-
obj.name = 'fibo'
108-
obj.value = n
109-
obj.run()
110-
return obj.result
111-
112-
因为参数 `obj` 的类型不确定,所以默认情况是不会对其属性进行重命名,这样可能会导致问题。
113-
114-
解决方案有两种,
115-
116-
一是使用 annotation 指定变量类型,例如:
117-
118-
.. code-block:: python
119-
120-
def fib(obj: QuickFibo, n):
121-
obj.name = 'fibo'
122-
obj.value = n
123-
obj.run()
124-
return obj.result
125-
126-
一是不修改脚本,使用规则指定变量类型。例如,执行下面的命令配置规则::
127-
128-
$ pyarmor env -p push rft_option:var_type_table "fibo:fib.obj QuickFibo"
129-
130-
其中,后者特别适用于类型定义不在当前模块,而是在其他模块,例如::
131-
132-
$ pyarmor env -p push rft_option:var_type_table "fibo:fib.obj foo:QuickFibo"
133-
134-
第二个警告::
135-
136-
WARNING There are function calls which may use unknown arguments
137-
138-
是因为在脚本 `fibo.py` 中,有如下的代码块:
139-
140-
.. code-block:: python
141-
142-
def show(rlist, n, delta=2):
143-
print('fibo', n, 'is', rlist)
144-
return n + delta
145-
146-
if __name__ == '__main__':
147-
...
148-
kwarg = {'n': n, 'delta': 3}
149-
show(result, **kwarg)
150-
151-
调用函数 `show` 的时候使用了参数 `kwarg` ,而字典的键值重构之后不会改变,而函数的参数名称都进行了重命名,所以运行重构后的脚本会导致出现参数不存在错误
152-
153-
解决方案之一是配置函数 `show` 的参数不能进行重命名,执行下面的命令进行配置::
154-
155-
$ pyarmor env -p rft_option:rft_exclude_args fibo:show
156-
157-
配置好之后,在重新构建工程::
84+
默认选项可以重构简单脚本,对于复杂脚本,重构之后脚本可能无法正确运行。例如::
15885

86+
$ pyarmor init --clean -e fibo.py
15987
$ pyarmor build --rft
160-
$ cat dist/fibo.py
16188
$ python dist/fibo.py
16289

163-
自动重构模式
164-
============
165-
166-
在上面的工程中,我们如果不想去进行额外的配置,可以使用自动重构模式
167-
168-
自动重构模式可以省去人工的配置,自动进行配置以生成正确的脚本。
169-
170-
首先使用下面的命令自动创建规则::
90+
这时候可以使用下面的命令自动生成额外的重构规则::
17191

17292
$ pyarmor build --autofix 1
17393

174-
然后在执行相应的构建命令::
94+
然后再次执行重构命令::
17595

176-
$ pyarmor build --rft
177-
178-
其基本的工作原理是
179-
180-
- 固定配置 rft_argument = 1
181-
- 如果发现某一个属性无法确定其类型,那么这个属性不进行重命名
182-
183-
如果不需要使用自动重构模式,那么使用下面的命令::
184-
185-
$ pyarmor build --autofix 0
186-
187-
然后在重新进行构建::
188-
189-
$ pyarmor build --rft
190-
191-
..
192-
使用自动生成的配置脚本
193-
----------------------
194-
195-
在重构过程中会自动生成配置脚本 `.pyarmor/project/rft_extra_config.sh`
196-
197-
在上例中,它的内容如下:
198-
199-
.. code-block:: bash
200-
201-
# The following variables type are unknown
202-
# Please replace "?" with variable type or "<any>"
203-
# "<any>" means not rename any attribute of this variable
204-
pyarmor env -p rft_option:var_type_table "fibo:fib.obj ?"
205-
206-
207-
# The following function arguments could not be renamed
208-
pyarmor env -p rft_option:rft_exclude_args fibo:show
209-
210-
这个脚本包含了解决两种警告所需要的额外配置,只需要替换 "?" 为变量的真实类型。
211-
212-
例如,修改第四行的内容为::
213-
214-
pyarmor env -p rft_option:var_type_table "fibo:fib.obj QuickFibo"
215-
216-
然后直接运行配置脚本,就可以完成额外的配置::
217-
218-
$ bash .pyarmor/project/rft_extra_config.sh
219-
220-
最后重新生成加密脚本::
221-
222-
$ pyarmor build --rft
223-
224-
查看加密脚本::
225-
226-
$ cat dist/fibo.py
96+
$ pyarmor build --rst
22797

228-
运行加密后的脚本::
98+
运行重构后的脚本::
22999

230-
$ python dist/fibo.py
100+
$ python dist/fibo.py
231101

232102
生成迷你型脚本
233103
==============
@@ -374,3 +244,123 @@ Pyarmor 发布在 PyPI 上面,使用下面的命令直接安装::
374244
$ pyarmor env -p set rft_option:rft_argument 1
375245

376246
然后在重新加密脚本,这样可以简化配置,但是大部分参数可能没有被重命名
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` 中,有如下的代码块:
268+
269+
.. code-block:: python
270+
271+
def fib(obj, n):
272+
obj.name = 'fibo'
273+
obj.value = n
274+
obj.run()
275+
return obj.result
276+
277+
因为参数 `obj` 的类型不确定,所以默认情况是不会对其属性进行重命名,这样可能会导致问题。
278+
279+
解决方案有两种,
280+
281+
一是使用 annotation 指定变量类型,例如:
282+
283+
.. code-block:: python
284+
285+
def fib(obj: QuickFibo, n):
286+
obj.name = 'fibo'
287+
obj.value = n
288+
obj.run()
289+
return obj.result
290+
291+
一是不修改脚本,使用规则指定变量类型。例如,执行下面的命令配置规则::
292+
293+
$ pyarmor env -p push rft_option:var_type_table "fibo:fib.obj QuickFibo"
294+
295+
其中,后者特别适用于类型定义不在当前模块,而是在其他模块,例如::
296+
297+
$ pyarmor env -p push rft_option:var_type_table "fibo:fib.obj foo:QuickFibo"
298+
299+
第二个警告::
300+
301+
WARNING There are function calls which may use unknown arguments
302+
303+
是因为在脚本 `fibo.py` 中,有如下的代码块:
304+
305+
.. code-block:: python
306+
307+
def show(rlist, n, delta=2):
308+
print('fibo', n, 'is', rlist)
309+
return n + delta
310+
311+
if __name__ == '__main__':
312+
...
313+
kwarg = {'n': n, 'delta': 3}
314+
show(result, **kwarg)
315+
316+
调用函数 `show` 的时候使用了参数 `kwarg` ,而字典的键值重构之后不会改变,而函数的参数名称都进行了重命名,所以运行重构后的脚本会导致出现参数不存在错误
317+
318+
解决方案之一是配置函数 `show` 的参数不能进行重命名,执行下面的命令进行配置::
319+
320+
$ pyarmor env -p rft_option:rft_exclude_args fibo:show
321+
322+
配置好之后,在重新构建工程::
323+
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+
在上例中,它的内容如下:
344+
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+
最后重新生成加密脚本::
357+
358+
$ pyarmor build --rft
359+
360+
查看加密脚本::
361+
362+
$ cat dist/fibo.py
363+
364+
运行加密后的脚本::
365+
366+
$ python dist/fibo.py

0 commit comments

Comments
 (0)