如何汉化并编译 Python 源代码

  • 前言
    • 参考文章
    • 我的工具
    • 关键字汉化
    • 其他源代码汉化
    • Linux 下编译
    • Windows 下编译
    • 汉化效果演示

前言

笔者是一名业余编程爱好者,年初偶然混进中文编程OO群。因觉得中文编程乃大势所趋,遂入了 Python 汉化(我称之为“草蟒”项目)的坑。笔者孤陋寡闻,刚开始汉化的时候只知道 GCC 且 GCC 不支持中文,所以没有选择汉化源代码的方式,而是采用替换式表层汉化方法(中文编写的程序,包括中文关键字和变量名等,先替换成英文,再交给解释器执行)。但近期从群里得知,Clang、VC 等编译器支持中文,这让我觉得从源代码入手进行汉化是完全可行的。
笔者在 Linux 和 Windows 系统下进行了实验汉化。Python 汉化大致可以分为两部分:关键字汉化和其他源代码汉化。

参考文章

[1]:为Python添加中文关键字
[2]:Python internals: adding a new statement to Python
[3]:Visual Studio error C2001:常量中有换行符(解决办法)
[4]:Changing CPython’s Grammar
[5]:Error C2001: Newline in constant when compiling

我的工具

  1. Windows 10 + Visual Studio 2019(须选装 python 开发支持)
  2. WSL Ubuntu + Clang
  3. 从 python 网站下载的 3.8.0 版源代码

关键字汉化

用 sublime 打开源代码 Gramma 目录中的 Grammar 文件并添加中文关键字,保存为 unicode 编码(下同)。示例如下:

if_stmt: ('if'|'如果') namedexpr_test ':' suite (('elif'|'不然') namedexpr_test ':' suite)* [('else'|'否则') ':' suite]
while_stmt: ('while'|'只要') namedexpr_test ':' suite [('else'|'另外') ':' suite]
for_stmt: ('for'|'取') exprlist ('in'|'于') testlist ':' [TYPE_COMMENT] suite [('else'|'另外') ':' suite]
......
with_stmt: ('with'|'管') with_item (',' with_item)*  ':' [TYPE_COMMENT] suite
......
lambdef: ('lambda'|'雷锋') [varargslist] ':' test
......

注意:或许是 python 版本和所用编译器的不同,汉化关键字需要加单引号,这与参考文章[1]所述有所不同。
另外还要修改 Python/ast.c 文件。

其他源代码汉化

汉化版必须支持英文版,所以不仅仅是汉化一些字符串,而是需要大量复制原来的代码并加以汉化。笔者汉化了两个函数以供演示效果,参见后面的图片。这是一个复杂的系统工程,欢迎感兴趣的读者联系我并加入汉化大业。

Linux 下编译

参见源代码目录下的 README.rst,cd 到源代码目录,然后执行以下命令:

    ./configuremake regen-grammar(重新生成 graminit.h 和 graminit.c)makemake test(比较耗时,仅做实验的话这一步可省去)sudo make install(这一步也可省略)

编译成功,运行 python 3.8.0,输入中文关键字和函数,正常执行。

Windows 下编译

Linux 平台下的轻松成功给了笔者很大的信心,随即转战 Windows 平台。之前只汉化了 while 等几个关键字,这次汉化了更多关键字,并打算用 Parser/pgen 这个 py 程序重新生成 graminit。结果让我大吃一惊,无论中文关键字加不加引号,或者用其他方式,都会报错。
转念一想,无论哪个平台,用的 graminit 文件都是一样的。何不在 linux 下生成汉化的 graminit 文件,然后在 windows 下使用呢?果然,这个办法是有效的。WSL 真心不错,否则要在两个平台之前切换还真麻烦。
开始编译。按照 PCBuild 下的 readme,在 Power Shell 中运行 build.bat。(第一次运行的话,会下载一些 externals,需要很长时间。)没执行一会,就显示一大堆红色警告:“error C2001: 常量中有换行符”。
问度娘,原来是 VS 的问题,奇数汉字不能正确解码,偶数汉字可以。网上给出的解决办法显然都不行。那么把 VS 的编译器换成 Clang 怎么样?结果还是显示同样的错误,而且还冒出其他错误。
难道我磕磕碰碰找到的新汉化方法又走不通?
不甘心,看看外网上的人怎么说。翻墙搜索半天,终于找到解决办法:在 Visual Studio 里,给修改过的有汉字的文件的编译命令加上一条:/utf-8。
重新编译,生成解决方案,成功!

汉化效果演示




今天就分享到这里,有兴趣的同学请联系草蟒老吴。
欢迎转载!

如何汉化并编译 Python 源代码相关推荐

  1. python源代码不需要编译成什么-编译 Python 源代码

    为什么可以/需要编译 通常在 Windows 下安装软件,只需要下载可执行文件,一直下一步就可以完成安装.而 Linux 下,你可以获取软件的源代码,自行编译生成可执行文件进行安装.用源代码有什么好处 ...

  2. python代码封装加密_静态编译python源代码,使用Nuitka加密你的py源码

    Nuitka,100%兼容标准python2/python3,静态编译你的python程序 1. 概述 Nuitka(nuitka.net)可以将python代码转换为C++,然后编译为可执行文件,其 ...

  3. python源码不需要编译成二进制代码_编译 Python 源代码

    为什么可以/需要编译 通常在 Windows 下安装软件,只需要下载可执行文件,一直下一步就可以完成安装.而 Linux 下,你可以获取软件的源代码,自行编译生成可执行文件进行安装.用源代码有什么好处 ...

  4. python中文版免费下载-Python IDLE汉化版下载

    Python IDLE(Python集成开发环境)是一款汉化版的Python集成开发环境,是一款专门用于各类非商业Python开发的选择,不过一般下载正版的python后,IDLE会自动安装,软件涵盖 ...

  5. python汉化 草蟒_草蟒首页、文档和下载 - Python 汉化版 - OSCHINA - 中文开源技术交流社区...

    草蟒是基于 Python 的全中文编程语言. 示例 1: # 截至 n 的斐波那契数列 >>> 函 斐波那契数列(n): >>> a, b = 0, 1 >& ...

  6. Python的准备工作——安装、配置、第一个项目、汉化(可不做)

    安装.配置步骤 1.下载python 2.下载集成开发环境pycharm 3.安装python 4.安装pycharm 5.使用Pycharm创建第一个Python项目 6.汉化 1.下载python ...

  7. gitlab安装并汉化

    gitlab安装并汉化 准备工作 Gitlab安装包分2种gitlab-ce,gitlab-ee; gitlab为社区免费版本,gitlab-ee为企业收费版本:在功能上没有太大的区别(应没有使用过与 ...

  8. python在线编译-在线编译python

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 尝试通过源码自己编译 python,使用的系统是 ubuntu14.04 ...

  9. GitLab-ce的汉化

    一.汉化指南,基于 Larry Li 版汉化指南 修改 (以9-0-stable-zh分支为例) 源码安装汉化 推荐按照 gitlab-ce 源代码中 doc/install/installation ...

  10. android 汉化

    apktool和签名 android软件apk的汉化.主要流程是:反编译.加入中文语言包.编译.签名.四个步骤. 谷歌有提供的反编译工具:apktool .http://code.google.com ...

最新文章

  1. 微信小程序开发 笔记
  2. JAVA基础代码分享--学生成绩管理
  3. DDMS的使用、内存溢出的调试和模拟器的启动命令参数
  4. Delphi - 对象构造浅析后续
  5. 我的第一次博客 张学良
  6. 后端接口重定向_接口自动化面试题,建议收藏!
  7. 110-简单类型之整数类型和小数类型
  8. ECMAScript 6 之 let 和 const 命令
  9. 我的世界服务器公会系统,[娱乐|综合|RPG] [付费] Advanced Clans — 更好的公会系统 [1.8-1.15]...
  10. pytorch---模型保存于加载(4)在一个文件中保存多个模型
  11. MFC调试工具——之BoundsChecker用法
  12. 龙泉寺贤超法师:用AI为古籍经书识别、断句、翻译
  13. win10 设置ctrl+shift 切换 中文输入法 英文输入法
  14. 【英语语法】句子类型
  15. matlab图像网格化像素提取像素扩大图片分块
  16. 带空格直角三角形图案的输出-c++
  17. 女博士年薪156万入职华为:给员工吃饱了,他们才会为你拼命
  18. 气象NC扇形经纬网格转换成前端要求的等经纬网格
  19. HALCON示例程序ball电路板焊点识别、检测、测量程序剖析
  20. java8 时间加一秒_java8 时间加一秒_java8新的时间日期库及使用示例

热门文章

  1. FL Studio最新汉化免费下载 水果音乐制作软件
  2. mysql数据库管理与开发pdf_深入浅出mysql数据库开发、优化与管理维护.pdf
  3. 酷应用背后,低代码正在被重估
  4. jieba 中文分词使用教程
  5. Word文件怎么快速查找关键词
  6. DDoS攻击的工具介绍
  7. MySQL存储过程和函数的区别
  8. 软件测试简历项目经验怎么写,没有项目经验?
  9. HTML网易云音乐页面设计,QtDesigner实现网易云音乐助手的页面设计
  10. php huoqv 多选,镊噍虫刻蘖舌#joquycg