用户手册
面向使用者。开发者/接手者请看 项目仓库;每个决策的来龙去脉在 项目仓库。 版本:0.1.1(基于 CPython 3.14.7 fork)—— 本手册与手里的包不一致时,以包里
python --build-info打出来的为准。
1. 这是什么
一个说中文的 Python:
- 中文关键字(
如果/类型/对于…)与英文关键字并列,中英可以混写; - 标准库有中文 API(
操作系统、并行.futures、多进程、正则、压缩包…),且英文原名一个不少(中英名指向同一对象); - 报错文案是中文(显示层),但
str(e)、e.args、type(e).__name__一律是英文 —— 第三方库、except ValueError、日志、pickle全不受影响; - 报错显示层三档(环境变量
CHINESEPYTHON_ERRORS):zh(默认,中文)/en(100% 还原英文)/both(中英并排,校对用);没设或写错都当zh。
2. 怎么跑(绿色目录)
# 解释器
Python\PCbuild\amd64\python.exe
# 官方示例(中英混写、关键字、异常、并发)
Python\PCbuild\amd64\python.exe examples\五分钟上手.py
Python\PCbuild\amd64\python.exe examples\能力演示.py
Python\PCbuild\amd64\python.exe examples\能力全景.py发行形态是「绿色目录」:python.exe + Lib\ + Doc\html\(官方英文 HTML 文档,每页顶部加了一条中文横幅,另有一页 中文入口.html:中文关键字全表 + 中文库名 → 官方文档页)+ 启动.cmd + 本手册;不写注册表、不改 PATH(要加 PATH 自己把 Python\PCbuild\amd64 加进去)。发行时另有两个单文件 exe(不在 zip 里):ChinesePython.exe(便携解释器,单文件.exe 脚本.py 直接用;首次运行解包到 %LOCALAPPDATA%\ChinesePython\,之后走缓存)与 ChinesePython-install.exe(自解压到自己目录并跑一遍包内自检)。
3. 中文关键字全表(硬 35 + 软 3)
硬关键字(与英文同号、可混写):
| 英文 | 中文 | 英文 | 中文 | 英文 | 中文 |
|---|---|---|---|---|---|
if | 如果 | elif | 否则如果 | else | 否则 |
while | 每当 | for | 对于 | break | 跳出 |
continue | 跳过 | class | 类型 | def | 定义 |
lambda | 匿名函数 | return | 返回 | yield | 产出 |
pass | 略过 | del | 删除 | assert | 断言 |
global | 全局 | nonlocal | 非局部 | try | 尝试 |
except | 捕获 | finally | 最终必须 | raise | 抛出 |
import | 导入 | from | 来自 | as | 作为 |
with | 使用 | True | 真值 | False | 假值 |
None | 空值 | and | 并且 | or | 或者 |
not | 并非 | in | 属于 | is | 等同 |
async | 异步 | await | 等待 |
软关键字(只在特定语法位置生效,平时可以当普通名字):match→匹配、case→情形、type→类型别名。
⚠ 关键字与「名字」是两层:class(关键字)译作类型;但库里一个普通名字叫 CLASS 时译作类(例如 symtable.CLASS 表示「类作用域」)—— 关键字只在小写 token 层生效,名字走各自的词表。
4. 内置名 / 异常 / 方法名的中文别名
除了关键字,还有一层中文别名(英文名照旧):
- 内置名 74 个(如
print→打印、len→长度…);内置异常 72 个(如ValueError→值错误); - 形参名 258 个、内置方法名 245 个、模块异常名 183 个。 完整对照(含反向索引)见 项目仓库(由编译器表自动生成,不是手抄)。
5. 标准库中文 API 怎么用
导入 操作系统 作为 操 # 也写作 import os
导入 并行.futures 作为 并行 # concurrent.futures
导入 多进程 # multiprocessing
打印(操.取当前目录())
对于 项 属于 操.遍历目录("."):
打印(项)
使用 并行.线程池执行器(2) 作为 池:
...- 已铺 157 个库(112 单文件模块 + 25 包 + 20 包装层);
- 英文原名一直能用(中英名是同一对象),所以老代码一行不用改。
6. ⚠ 只翻了一部分的库(诚实清单)
| 库 | 没翻的部分 |
|---|---|
套接字(socket) | 零散常量留英文(族常量按语义翻了:地址族_INET、协议_TCP 等) |
C类型(ctypes) | wintypes 只翻教学常用的一批;其余 P*/LP* 指针别名留英文 |
安全套接字(ssl) | 上百个协议常量留待后续 |
多进程(multiprocessing) | _multiprocessing 那边 import 进来的 C 类型(SemLock 等)留英文 |
类型注解(typing)/ 平台信息(platform) | 整模块薄壳:中文名是别名(同一对象),typing 覆盖 __all__ 全部 105 个、platform 23 个;官方用例照英文原样跑(不换名)—— 这两个库的用例通篇按模块名自证 / 直接给真模块打补丁 |
导入机制(importlib) | 薄壳包:中文名是别名(跟英文名同一个对象),共 94 个 —— 包级 3 个 + 子模块内部名 91 个(导入机制.工具.规格自路径、导入机制.机械.源文件加载器、导入机制.元数据.取版本、导入机制.资源.读取器.文件读取器 …);私有子模块(_abc、metadata/_*、resources/_*)没有中文名,只有英文名的身份别名 |
异步IO(asyncio) | 薄壳:中文名是别名(指向英文那份同一对象),包级可用 71 个;子模块内部名(如 Lock.acquire)不在包级别名里 |
单元测试(unittest) | 子类覆盖点(setUp/tearDown/run/addSuccess/loadTestsFrom*… 共 51 个)留英文 —— 改了定义名,子类按英文名写的覆盖就失效;中文可用的是类名、模块级函数与 55 个 断言* 助手 |
| 其余 | 以 项目仓库 每行的备注为准 |
7. 未铺的库(28 个已否决,都有决策号与证据)
常见几类(完整见 项目仓库):
- 启动期/进程级耦合:
site、warnings、codecs、encodings、_collections_abc; - 自我描述型:
;typing - 跨进程/验证台限制:
multiprocessing(已收,但走专门机制)、dbm(Windows 无 C 扩展); - GUI/环境:
tkinter(用例在桌面会话里不可行); 带非:.py数据的包ensurepip、venv—— 相关记录 已撤销否决并入册(生成器现在会同步非.py数据;官方用例 32/32 与 42/42 全过)⇒ 36 个降为 34 个;相关记录 再修正为 33 个;相关记录/相关记录/相关记录 收走unittest/asyncio/importlib⇒ 30 个;- 薄再导层/彩蛋/废弃层:
compression、antigravity、this、sre_*。 这些库英文版照常可用(它们没被替换,只是没有中文 API)。
还有一类:没有 Lib/ 文件的内置模块(71 个)
有些模块编在解释器本体里,磁盘上根本没有对应文件(实测它们的 __file__ 都是 None)—— 这类没法「复制文件再改名」, 我们已给其中 4 个铺了中文名(数学、时间、垃圾回收、ZLIB压缩),其余按用户需要跳过:
sys(解释器自己的接口):暂不中文化。它是地基(我们 133 个中文名模块里 69 个内部都在用它), 而用户代码真正会碰的只有几个成员 ⇒ 照英文写就好:
import sys
print(sys.version) # 解释器版本字符串
print(sys.executable) # 这个解释器是哪个 exe / 可执行文件
print(sys.argv) # 命令行参数;脚本名在第 0 个常用还有:sys.path(导入路径,装包/找不到模块时先看它)、sys.stdout / sys.stderr(输出与重定向)、 sys.exit(码)(结束程序)、sys.platform、sys.version_info、sys.maxsize、sys.getrecursionlimit()。 中文名将来可能加(最省的一条是给 sys 做「一行身份别名」,让它与英文那份是同一个模块对象),但现在不做。
atexit/errno/marshal:不铺 —— 用户向的文档与示例里 0 次使用;errno的正常用法是OSError.errno(属性),marshal是.pyc内部件。- 其余 63 个是地基件、内部加速件、平台件(
nt/msvcrt/winreg)与调试件 —— 用户不用,跳过; 完整清单与定性见项目仓库 的附录。
8. 已知差异与限制
- pickle 协议 <4 写不了中文模块名:用协议 4/5(
pickle.HIGHEST_PROTOCOL即可)——套接字/路径库/C类型/多进程都有这一条; - 少数
repr/__all__项目仓库; - 第三方库(pip 装的)仍是英文,与中文标准库共存无冲突;
str(e)是英文(有意的:保证与第三方/日志/pickle 兼容)。
9. 怎么切回英文
- 报错文案:
CHINESEPYTHON_ERRORS三档 ——zh(默认)/en(显示层完全还原英文)/both(中英并排:校对、或排查「是显示层的问题还是别处」时最好用);没设或写错都当zh(判据在Python/Lib/zh_traceback.py:27-35); - 代码:直接用英文原名(
import os、os.walk)——一直有效; - 想知道某名字的中英对照:查 项目仓库 或 项目仓库。
10. 这个解释器是哪一份?(--build-info)
同一个版本号下可能有字节不同的两份(比如引擎里那份旧的)—— 所以「哪一份」不能只看版本号:
python --build-info打印四类东西:身份(base-3.14.7 到现在全量改动文件的内容联合哈希,唯一排除物是生成物自身)、python314.dll 的 SHA-256(当场实测,与生成时并排)、两个仓的 HEAD(生成时快照)、生成器/词表哈希与预装 pip 版本。第一行是人类可读的一句话。
换过 dll 会当场显示 [不一致(这个 dll 不是生成时那个!)] —— 这正是「同版本号的第二份」露馅的地方。身份数据由 tools\生成构建信息.py 生成(--检查 只查不改)。
11. 许可与来源
- 基于 CPython 3.14.7 fork:保留上游 PSF LICENSE(见
Python\LICENSE); - 本项目自身许可:MIT(发行时随包附
LICENSE); - 上游:https://github.com/python/cpython
12. 常见问题
Q:为什么异常类名还是英文? A:type(e).__name__ 保持英文是铁律(见 项目仓库 §1 红线 #2/#3):中文只在显示层,可被 CHINESEPYTHON_ERRORS=en 完全还原(both 则中英并排给校对看);这样 except ValueError、第三方库、str(e) 全不受影响。 Q:为什么有的模块是中文名、有的还是英文? A:中文名是多出来的一份(操作系统 与 os 是同一个模块对象);没铺的库(见 §7)只有英文名。 Q:类 能当变量名吗? A:能(它不是关键字);但 类型 不能(它就是 class)。