最近在看一本python的书CPython Internals,打算研究一下CPython的代码,然后就在Linux(ubuntu)下编译了CPython源码,在此记录一下。

1. 使用git下载cpython源码

git clone --branch 3.9 https://github.com/python/cpython
cd cpython

2. 使用weget下载cpython3.9.7版本,使用这种是适用于没安装git或者访问github网络比较差的小伙伴

 wget https://github.com/python/cpython/archive/refs/tags/v3.9.7.tar.gztar zxf v3.9.7.tar.gzcd cpython-3.9.7

3. 下载完成之后,需要对cpython进行编译

# 编译工具安装
sudo apt install build-essential
# 依赖库安装
sudo apt install libssl-dev zlib1g-dev libncurses5-dev libncursesw5-dev libreadline-dev libsqlite3-dev libgdbm-dev libdb5.3-dev libbz2-dev libexpat1-dev liblzma-dev libffi-dev

4. 运行配置脚本,配置的时候选择一个debug模式,也可以不选择,这个看个人选择。

./configure --with-pydebug

5. 生成Makefile,j2表示启动两个job来加速编译,-s 表示silent,即不打印output

 make -j2 -s

注:在linux执行make --help可参考具体的参数选项

mark123@ubuntu-vm:~/cpythonCode/cpython$ make --help
Usage: make [options] [target] ...
Options:-b, -m                      Ignored for compatibility.-B, --always-make           Unconditionally make all targets.-C DIRECTORY, --directory=DIRECTORYChange to DIRECTORY before doing anything.-d                          Print lots of debugging information.--debug[=FLAGS]             Print various types of debugging information.-e, --environment-overridesEnvironment variables override makefiles.--eval=STRING               Evaluate STRING as a makefile statement.-f FILE, --file=FILE, --makefile=FILERead FILE as a makefile.-h, --help                  Print this message and exit.-i, --ignore-errors         Ignore errors from recipes.-I DIRECTORY, --include-dir=DIRECTORYSearch DIRECTORY for included makefiles.-j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no arg.-k, --keep-going            Keep going when some targets can't be made.-l [N], --load-average[=N], --max-load[=N]Don't start multiple jobs unless load is below N.-L, --check-symlink-times   Use the latest mtime between symlinks and target.-n, --just-print, --dry-run, --reconDon't actually run any recipe; just print them.-o FILE, --old-file=FILE, --assume-old=FILEConsider FILE to be very old and don't remake it.-O[TYPE], --output-sync[=TYPE]Synchronize output of parallel jobs by TYPE.-p, --print-data-base       Print make's internal database.-q, --question              Run no recipe; exit status says if up to date.-r, --no-builtin-rules      Disable the built-in implicit rules.-R, --no-builtin-variables  Disable the built-in variable settings.-s, --silent, --quiet       Don't echo recipes.-S, --no-keep-going, --stopTurns off -k.-t, --touch                 Touch targets instead of remaking them.--trace                     Print tracing information.-v, --version               Print the version number of make and exit.-w, --print-directory       Print the current directory.--no-print-directory        Turn off -w, even if it was turned on implicitly.-W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILEConsider FILE to be infinitely new.--warn-undefined-variables  Warn when an undefined variable is referenced.This program built for x86_64-pc-linux-gnu
Report bugs to <bug-make@gnu.org>
mark123@ubuntu-vm:~/cpythonCode/cpython$

6. 执行./python 进入python交互式环境

mark123@ubuntu-vm:~/cpythonCode/cpython$ ./python
Python 3.9.7 (default, Sep 11 2021, 15:23:18)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>

至此,CPython源码已经编译完成。

Linux下CPython源码的编译相关推荐

  1. 初步了解mac下C源码的编译过程

    初步了解mac下C源码的编译过程 参考: 请问Mac OS X (10.9.1)下创建和使用动态链接库的方法 cc.gcc.g++.CC的区别概括 - 今晚打酱油_ - 博客园 Linux 下 的 c ...

  2. Ubuntu16下bitcoin源码的编译与运行-2021

    Ubuntu16下bitcoin源码的编译与运行 1.更新软件列表 2.安装依赖包 3.将源代码克隆到本地 4.编译运行 5.回到./bitcoin目录下重新编译 6.编写配置文件 7.bitcoin ...

  3. Linux下qwt源码编译,QWT的编译与配置

    QWT,全称是Qt Widgets for Technical Applications,是一个基于LGPL版权协议的开源项目, 可生成各种统计图.它为具有技术专业背景的程序提供GUI组件和一组实用类 ...

  4. 01 linux 下tcl源码编译安装和tcl手册使用

    标签(空格分隔): 源码编译安装 2020.7.7 1 下载安装包.tar.gz 2 解压压缩包 3 进入configure文件所在文件夹,执行./configure ./configure 注解: ...

  5. Linux下Poppler源码编译安装

    Poppler Poppler是用于呈现可移植文档格式(PDF)文档的免费软件实用程序库.它的开发得到freedesktop.org的支持.它通常在Linux系统上使用,并被开源GNOME和KDE桌面 ...

  6. Linux下阅读源码工具

    闲来无事,于是又想进到Linux内核里面去逛逛了,但是只装了个ctags的工具,虽然说它可以在源码中到处跳动查看代码,但是感觉应该会有更好的方法. 虽然说可以转到windows下面去使用SourceI ...

  7. Linux下软件源码包安装问题解决方法

    从源码包安装软件最重要的就是仔细阅读README INSTALL等说明文件 通常从源码包安装软件的步骤是: tar jxvf gtk+-2.4.13.tar.bz2 解开源码包 cd gtk+-2.4 ...

  8. linux下free源码,linux命令free源码解读:Procps free.c

    linux命令free源码解读 linux命令free源码解读:Procps free.c 作者:isayme 发布时间:September 26, 2011 分类:Linux 我们讨论的是linux ...

  9. Linux 下 PostgreSQL 源码编译安装

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. PostgreSQL 是一个功能强大的开源对象关系数据库管理系统(ORDBMS),它从伯克利写 ...

最新文章

  1. 大主子表关联的性能优化方法
  2. 深度学习元老Yann Lecun详解卷积神经网络
  3. API网关Kong系列(二)部署
  4. DS18B20读数错误排除
  5. python中表示单一数据的类型被称为_各种Python数据类型的完整列表
  6. matlab wc wp,数字信号处理MATLAB习题.PDF
  7. oracle数据导入sqlldr小例子
  8. [react] render在什么时候会被触发?
  9. linux看系统硬件,Linux 查看系统硬件信息(实例详解)
  10. java list 交集_java两个List的交集,并集
  11. html标签企业级命名规范
  12. laravel 除了主页 都是404 webconfig_通过 Laravel 创建一个 Vue 单页面应用(六)
  13. android随机抽奖代码_Android自己定义效果——随机抽奖
  14. 计算机硬件维修书,计算机硬件维修手册
  15. TAOCP-Reading-计算机程序设计艺术阅读-1-2
  16. 鸿蒙os系统3.0电脑,华为鸿蒙系统升级指南,速看!
  17. Opencascade TopoDS_Shape Orientation
  18. U盘文件夹变成.exe文件的解决方法
  19. 矿 第一次数据结构实验
  20. typename的两个意思

热门文章

  1. Word打印预览只能显示一半?
  2. 注意PostgreSQL的关键字(保留字)和identified的用法和位置
  3. Android 泽宇_EventBus的使用
  4. 微信、支付宝,收款二维码实时生成,自定义金额 备注生成
  5. Laravel 5.0 框架查看执行过的SQL语句
  6. spark DataFrame 根据条件替换数据中的值,并保留非条件的原始值
  7. 电路交换和分组交换有什么区别?
  8. 《世界上最简单的会计学》
  9. (笔记)前缀,中缀,后缀表达式
  10. C语言大数一元二次方程,C语言题目(一元二次方程的求解)