热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python源码编译为库_从源码编译Python

尝试通过源码自己编译Python,使用的系统是Ubuntu14.04LTS。首先去官网下载源码,地址:源码下载。下载完成之后,

尝试通过源码自己编译 Python,使用的系统是 Ubuntu14.04 LTS。

561824476.png

首先去官网下载源码,地址:源码下载。下载完成之后,解压源码:

1

tar -zxvf Python-2.7.12.tgz

可以看到目录结构如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

.

├── aclocal.m4

├── config.guess

├── config.sub

├── configure

├── configure.ac

├── Demo

├── Doc

├── Grammar

├── Include

├── install-sh

├── Lib

├── LICENSE

├── Mac

├── Makefile.pre.in

├── Misc

├── Modules

├── Objects

├── Parser

├── PC

├── PCbuild

├── pyconfig.h.in

├── Python

├── README

├── RISCOS

├── setup.py

└── Tools

其中,我们比较关注的几个目录是:

Include: 这个目录包括了 Python 的所有头文件。

Lib:这里是 Python 标准库,都是用 Python 实现的。

Modules:用 C 语言编写的模块,比如 cStringIO / tkinter 等。

Objects:Python 内建对象,如 int / list 等。

Python:Python 解释器的 Compiler 和执行引擎。

Parser:Python 解释器的 Scanner 和 Parser。

我并不只是想尝试简单的通过源码编译安装,那么,在编译之前,我们先对它做一点小小的改动吧。今天先不做太复杂的事情,尝试一下“颠倒黑白”吧。所谓颠倒黑白,就是在输出(只有输出时)bool 型变量时,将 True/False 对调。关于输出 bool 变量的 C 语言实现,在 Objects/boolobject.c 的第 7-14 行,如下:

1

2

3

4

5

6

7

8

static int

bool_print(PyBoolObject *self, FILE *fp, int flags)

{

Py_BEGIN_ALLOW_THREADS

fputs(self->ob_ival == 0 ? "False" : "True", fp);

Py_END_ALLOW_THREADS

return 0;

}

可以看出,对于输出 True 还是 False 的判断是用三元运算符 self->ob_ival == 0 ? "False" : "True",那么,其实改动就非常容易了:

1

fputs(self->ob_ival != 0 ? "False" : "True", fp);

将比较运算符做一点小改动,就“颠倒黑白”啦。然后执行:

1

2

3

./configure --prefix=/path/u/what/to/install

make

make install

第一条命令的 --prefix= 后面是你想要安装的位置,你可以自行调整。等待运行完毕,就安装好啦,进入指定的目录,目录结构如下:

1

2

3

4

5

.

├── bin

├── include

├── lib

└── share

想要运行的话,执行 bin/python 即可,你也可以将其加入到 PATH 中,不过还是不建议去搞乱系统那个。好了,用我们自己编译的解释器执行几条语句吧:

1

2

3

4

5

6

7

8

9

10

11

>>> print True

False

>>> print False

True

>>> print 3 > 5

True

>>> print 1 == 2

True

很明显,已经“颠倒黑白”啦。



推荐阅读
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
author-avatar
额哦哦额llo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有