Skip to content

Commit 0e78879

Browse files
committed
Refine doc
1 parent 1286f10 commit 0e78879

File tree

4 files changed

+119
-116
lines changed

4 files changed

+119
-116
lines changed

pyarmor/ask/index.html

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<!doctype html>
2+
<html lang="zh" data-bs-theme="auto">
3+
<head>
4+
<meta charset="utf-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1">
6+
<title>Pyarmor</title>
7+
<link href="../assets/bootstrap-5.3.3/bootstrap.min.css" rel="stylesheet">
8+
</head>
9+
<body>
10+
<h3 class="m-3">Ask Pyarmor</h3>
11+
<script src="../assets/bootstrap-5.3.3/bootstrap.bundle.min.js"></script>
12+
</body>
13+
</html>

pyarmor/docs/zh/proposals.rst

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ Pyarmor 提供 5 种不同的许可证模块
209209

210210
1. 类的某一个方法名称如果必须要和基类中的方法名称一致,并且这个基类是外部类型。这就要求
211211

212-
- 该方法中有 super 函数调用,或者使用人工规则指定该方法名称不能被重命名
212+
- 使用人工规则指定该方法名称不能被重命名
213213
- 基类可以被动态导入,或者人工配置该外部类型的所有属性
214214

215215
2. 对于未知属性,可以组合下列解决方案
@@ -218,8 +218,7 @@ Pyarmor 提供 5 种不同的许可证模块
218218
- 人工设定该变量的类型
219219
- 人工设定属性链的重命名规则
220220
- 直接修改脚本,规范变量名称,简化属性链重命名规则
221-
- 匹配当前模块内部的所有类定义,只要能匹配,就是该类(需要考虑外部基类的情况)
222-
- 人工列出模块使用到的外部类型,只要未知属性匹配任何一个外部类型,就认为无需要改变
221+
- 根据属性猜测类型,匹配当前模块内部的所有类定义,只要能匹配 2 个以上,就是该类
223222

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

pyarmor/docs/zh/user/configuration.rst

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

167167
参数和局部变量总是会被重命名,这里列出的名称对参数和局部变量不起作用
168-
* - rft_exclude_calls
168+
* - rft_exclude_funcs
169169
- 模式列表
170170
-
171171
- 这里面列出的函数名称,对应的参数都不进行重命名::
@@ -228,161 +228,163 @@ rft_option
228228
- "no" 不重名,也不记录到日志
229229
- "err" 报错退出
230230

231-
高级选项
232-
~~~~~~~~
231+
该选项功能尚未实现
233232

234-
- rft_str_keywords
233+
..
234+
下列选项为内部选项,
235235
236-
这种类型的规则可以重命名指定范围(模块,函数,工程)中的字符串常量,包括字典常量中的 Key,以及下标 Subscript 的 Key
236+
- rft_str_keywords
237237

238-
默认情况下,函数参数会全部重命名。例如:
238+
这种类型的规则可以重命名指定范围(模块,函数,工程)中的字符串常量,包括字典常量中的 Key,以及下标 Subscript 的 Key
239239

240-
.. code:: python
240+
默认情况下,函数参数会全部重命名。例如:
241241

242-
def show(a, b, /, c, d=2, *args, **kwargs):
243-
...
242+
.. code:: python
244243
245-
# 重构之后
246-
def pyarmor__1(pyarmor__2, pyarmor__3, pyarmor__4, pyarmor__5=2, *pyarmor__6, **pyarmor__7):
247-
...
244+
def show(a, b, /, c, d=2, *args, **kwargs):
245+
...
248246
249-
但是这样可能会导致调用函数的时候出现参数找不到的错误
247+
# 重构之后
248+
def pyarmor__1(pyarmor__2, pyarmor__3, pyarmor__4, pyarmor__5=2, *pyarmor__6, **pyarmor__7):
249+
...
250250
251-
因为函数调用的时候可能通过多种形式指定参数名称,例如
251+
但是这样可能会导致调用函数的时候出现参数找不到的错误
252252

253-
.. code:: python
253+
因为函数调用的时候可能通过多种形式指定参数名称,例如
254254

255-
# case 1: 这种情况会自动识别和处理
256-
show(2, 5, c=2, d=8)
255+
.. code:: python
257256
258-
# case 2: 参数名称在 dict 常量中
259-
kwarg = { 'c': 1, 'd': 3 }
260-
show(1, 9, **kwarg)
257+
# case 1: 这种情况会自动识别和处理
258+
show(2, 5, c=2, d=8)
261259
262-
# case 3: 参数名称在 subscript 中的字符串常量
263-
kwarg['c'] = 8
264-
show(1, 10, **kwarg)
260+
# case 2: 参数名称在 dict 常量中
261+
kwarg = { 'c': 1, 'd': 3 }
262+
show(1, 9, **kwarg)
265263
266-
# case 4: 参数是 dict 函数的关键字参数
267-
kwarg = dict(d=6)
268-
show(1, 10, 5, **kwarg)
264+
# case 3: 参数名称在 subscript 中的字符串常量
265+
kwarg['c'] = 8
266+
show(1, 10, **kwarg)
269267
270-
默认情况下不会对字符串进行重命名,所以除了第一种情况外,其他情况都不会进行自动处理。重构后的代码如下:
268+
# case 4: 参数是 dict 函数的关键字参数
269+
kwarg = dict(d=6)
270+
show(1, 10, 5, **kwarg)
271271
272-
.. code:: python
272+
默认情况下不会对字符串进行重命名,所以除了第一种情况外,其他情况都不会进行自动处理。重构后的代码如下:
273273

274-
# case 1: 这种情况会自动识别和处理
275-
pyarmor__1(2, 5, pyarmor__4=2, pyarmor__5=8)
274+
.. code:: python
276275
277-
# case 2: 字符串参数不会重构
278-
pyarmor__10 = { 'c': 1, 'd': 3 }
279-
pyarmor__1(1, 9, **pyarmor__10)
276+
# case 1: 这种情况会自动识别和处理
277+
pyarmor__1(2, 5, pyarmor__4=2, pyarmor__5=8)
280278
281-
# case 3: 参数名称在 subscript 中的字符串常量
282-
pyarmor__10['c'] = 8
283-
pyarmor__1(1, 10, **pyarmor__10)
279+
# case 2: 字符串参数不会重构
280+
pyarmor__10 = { 'c': 1, 'd': 3 }
281+
pyarmor__1(1, 9, **pyarmor__10)
284282
285-
# case 4: 参数是 dict 函数的关键字参数
286-
pyarmor__10 = dict(d=6)
287-
pyarmor__1(1, 10, 5, **pyarmor__10)
283+
# case 3: 参数名称在 subscript 中的字符串常量
284+
pyarmor__10['c'] = 8
285+
pyarmor__1(1, 10, **pyarmor__10)
288286
289-
为了修改字符串中的关键字参数名称 `c` 和 `d` , 需要使用下面的命令增加规则::
287+
# case 4: 参数是 dict 函数的关键字参数
288+
pyarmor__10 = dict(d=6)
289+
pyarmor__1(1, 10, 5, **pyarmor__10)
290290
291-
$ pyarmor env push rft_option:rft_str_keywords "fibo:show c d"
291+
为了修改字符串中的关键字参数名称 `c` 和 `d` , 需要使用下面的命令增加规则::
292292

293-
这样重构之后会修改字符串和字典常量中关键字字符串,例如:
293+
$ pyarmor env push rft_option:rft_str_keywords "fibo:show c d"
294294

295-
.. code:: python
295+
这样重构之后会修改字符串和字典常量中关键字字符串,例如:
296296

297-
# case 1: 这种情况会自动识别和处理
298-
pyarmor__1(2, 5, pyarmor__4=2, pyarmor__5=8)
297+
.. code:: python
299298
300-
# case 2: 字符串参数名称进行了重命名
301-
pyarmor__10 = { 'pyarmor__4': 1, 'pyarmor__5': 3 }
302-
pyarmor__1(1, 9, **pyarmor__10)
299+
# case 1: 这种情况会自动识别和处理
300+
pyarmor__1(2, 5, pyarmor__4=2, pyarmor__5=8)
303301
304-
# case 3: 字符串参数名称进行了重命名
305-
pyarmor__10['pyarmor__4'] = 8
306-
pyarmor__1(1, 10, **pyarmor__10)
302+
# case 2: 字符串参数名称进行了重命名
303+
pyarmor__10 = { 'pyarmor__4': 1, 'pyarmor__5': 3 }
304+
pyarmor__1(1, 9, **pyarmor__10)
307305
308-
# case 4: dict 函数的关键字参数没有进行重命名
309-
pyarmor__10 = dict(d=6)
310-
pyarmor__1(1, 10, 5, **pyarmor__10)
306+
# case 3: 字符串参数名称进行了重命名
307+
pyarmor__10['pyarmor__4'] = 8
308+
pyarmor__1(1, 10, **pyarmor__10)
311309
312-
对于第四种情况,有两种处理方案
310+
# case 4: dict 函数的关键字参数没有进行重命名
311+
pyarmor__10 = dict(d=6)
312+
pyarmor__1(1, 10, 5, **pyarmor__10)
313313
314-
一是人工把原来的代码替换成为字典常量 `{ "key": value }` ,例如:
314+
对于第四种情况,有两种处理方案
315315

316-
.. code:: python
316+
一是人工把原来的代码替换成为字典常量 `{ "key": value }` ,例如:
317317

318-
# case 4: 参数是 dict 函数的关键字参数,需要替换成为字典常量
319-
kwarg = {'d': 6} # kwarg = dict(d=6)
320-
show(1, 10, 5, **kwarg)
318+
.. code:: python
321319
322-
二是不修改代码,而是使用下面的配置,不重名函数 show 的参数,例如::
320+
# case 4: 参数是 dict 函数的关键字参数,需要替换成为字典常量
321+
kwarg = {'d': 6} # kwarg = dict(d=6)
322+
show(1, 10, 5, **kwarg)
323323
324-
$ pyarmor env rft_option:rft_exclude_args fibo::show
324+
二是不修改代码,而是使用下面的配置,不重名函数 show 的参数,例如::
325325

326-
使用第二种方案重构之后,函数 show 仅 posonly, stararg 和 kwarg 会进行重命名,其他参数都保持不变,例如:
326+
$ pyarmor env rft_option:rft_exclude_args fibo::show
327327

328-
.. code:: python
328+
使用第二种方案重构之后,函数 show 仅 posonly, stararg 和 kwarg 会进行重命名,其他参数都保持不变,例如:
329329

330-
# case 1:
331-
pyarmor__1(2, 5, c=2, d=8)
330+
.. code:: python
332331
333-
# case 2:
334-
pyarmor__10 = { 'c': 1, 'd': 3 }
335-
pyarmor__1(1, 9, **pyarmor__10)
332+
# case 1:
333+
pyarmor__1(2, 5, c=2, d=8)
336334
337-
# case 3:
338-
pyarmor__10['c'] = 8
339-
pyarmor__1(1, 10, **pyarmor__10)
335+
# case 2:
336+
pyarmor__10 = { 'c': 1, 'd': 3 }
337+
pyarmor__1(1, 9, **pyarmor__10)
340338
341-
# case 4:
342-
pyarmor__10 = dict(d=6)
343-
pyarmor__1(1, 10, 5, **pyarmor__10)
339+
# case 3:
340+
pyarmor__10['c'] = 8
341+
pyarmor__1(1, 10, **pyarmor__10)
344342
345-
- rft_get_setattr
343+
# case 4:
344+
pyarmor__10 = dict(d=6)
345+
pyarmor__1(1, 10, 5, **pyarmor__10)
346346
347-
是否重命名属性表达式 obj.attr 中属性名称是个难题,主要有两种情况
347+
- rft_get_setattr
348348

349-
- obj 的类型未知
350-
- obj 的类型已知,但是 attr 不存在于 obj 类型的属性表中
349+
是否重命名属性表达式 obj.attr 中属性名称是个难题,主要有两种情况
351350

352-
因为 obj 的类型可能是动态变化的,所以到底是否重命名 attr 是个难题
351+
- obj 的类型未知
352+
- obj 的类型已知,但是 attr 不存在于 obj 类型的属性表中
353353

354-
还包括 setattr(obj, 'attr', value) 和 getattr(obj, 'attr') 等形式
354+
因为 obj 的类型可能是动态变化的,所以到底是否重命名 attr 是个难题
355355

356-
一种解决方案是在脚本中使用 annotation 指定该变量的属性
356+
还包括 setattr(obj, 'attr', value) 和 getattr(obj, 'attr') 等形式
357357

358-
另外一种解决方案是设置为遇到无法处理的情况下提示用户进行处理::
358+
一种解决方案是在脚本中使用 annotation 指定该变量的属性
359359

360-
$ pyarmor env set rft_option:on_unknown_attr ?
360+
另外一种解决方案是设置为遇到无法处理的情况下提示用户进行处理::
361361

362-
这样在遇到不可识别的对象类型时候,Pyarmor 提示用户进行处理
362+
$ pyarmor env set rft_option:on_unknown_attr ?
363363

364-
- 指定变量的类型
365-
- 不进行命名,所有该对象的其他属性也不进行重命名
366-
- 进行重命名,所有该对象的其他属性也重命名
364+
这样在遇到不可识别的对象类型时候,Pyarmor 提示用户进行处理
367365

368-
- rft_call_rules
366+
- 指定变量的类型
367+
- 不进行命名,所有该对象的其他属性也不进行重命名
368+
- 进行重命名,所有该对象的其他属性也重命名
369369

370-
列表,应用于函数调用语句,匹配模式的函数,调用中关键字参数均进行重命名::
370+
- rft_call_rules
371371

372-
module:scope:attrs
372+
列表,应用于函数调用语句,匹配模式的函数,调用中关键字参数均进行重命名::
373373

374-
其中 attrs 可以是如下的格式使用 "." 进行连接:
374+
module:scope:attrs
375375

376-
- name
377-
- name()
378-
- name[]
376+
其中 attrs 可以是如下的格式使用 "." 进行连接:
379377

380-
例如::
378+
- name
379+
- name()
380+
- name[]
381381

382-
joker.card:Fibo.start:self.runner.run
382+
例如::
383383

384-
- rft_attr_rules
384+
joker.card:Fibo.start:self.runner.run
385385

386-
属性重命名规则,满足模式的属性链表进行重命名,模式的格式和 rft_call_rulers 相同::
386+
- rft_attr_rules
387387

388-
module:scope:attrs
388+
属性重命名规则,满足模式的属性链表进行重命名,模式的格式和 rft_call_rulers 相同::
389+
390+
module:scope:attrs

pyarmor/docs/zh/user/tutorials.rst

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ Pyarmor 发布在 PyPI 上面,使用下面的命令直接安装::
162162

163163
因为外部模块需要导入包中的类和函数,所以这些输出的名称不能进行重命名
164164

165-
一种方式是启用自动输出 `rft_auto_export`::
165+
这就需要启用自动输出选项 `rft_auto_export`::
166166

167167
$ pyarmor env -p set rft_option:rft_auto_export 1
168168

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

174-
另外一种方式是直接指定需要输出类和函数::
175-
176-
$ pyarmor env -p set rft_option:rft_auto_export tomjson.decoder:JSONDecoder
177-
$ pyarmor env -p push rft_option:rft_auto_export \
178-
tomjson:load tomjson:loads tomjson:dump tomjson:dumps
179-
180-
需要注意的是,`rft_auto_export` 中的名称必须是模块内部定义的名称,而不能是导入的名称,例如::
181-
182-
# 错误,JSONDecoder 并没有在 tomjson/__init__.py 中被定义,只是被导入进来使用
183-
$ pyarmor env -p set rft_option:rft_auto_export tomjson:JSONDecoder
184-
185174
然后重构整个包::
186175

187176
$ pyarmor build --rft
@@ -301,7 +290,7 @@ Pyarmor 发布在 PyPI 上面,使用下面的命令直接安装::
301290
使用下面的命令配置函数 `show` 的参数不能进行重命名::
302291

303292
$ pyarmor env -p set rft_option:rft_argument 3
304-
$ pyarmor env -p push rft_option:rft_exclude_calls fibo:show
293+
$ pyarmor env -p push rft_option:rft_exclude_funcs fibo:show
305294

306295
配置修改之后,需要重新构建脚本::
307296

0 commit comments

Comments
 (0)