從源碼編譯 Python
(你也可以在我的博客閱讀這篇文章)
嘗試通過源碼自己編譯 Python,使用的系統是 Ubuntu14.04 LTS。
首先去官網下載源碼,地址:源碼下載。下載完成之後,解壓源碼:
tar -zxvf Python-2.7.12.tgzn
可以看到目錄結構如下:
.n├── aclocal.m4n├── config.guessn├── config.subn├── configuren├── configure.acn├── Demon├── Docn├── Grammarn├── Includen├── install-shn├── Libn├── LICENSEn├── Macn├── Makefile.pre.inn├── Miscn├── Modulesn├── Objectsn├── Parsern├── PCn├── PCbuildn├── pyconfig.h.inn├── Pythonn├── READMEn├── RISCOSn├── setup.pyn└── Toolsn
其中,我們比較關注的幾個目錄是:
- 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 行,如下:
static intnbool_print(PyBoolObject *self, FILE *fp, int flags)n{n Py_BEGIN_ALLOW_THREADSn fputs(self->ob_ival == 0 ? "False" : "True", fp);n Py_END_ALLOW_THREADSn return 0;n} n
可以看出,對於輸出 True 還是 False 的判斷是用三元運算符 self->ob_ival == 0 ? "False" : "True",那麼,其實改動就非常容易了:
fputs(self->ob_ival != 0 ? "False" : "True", fp);n
將比較運算符做一點小改動,就「顛倒黑白」啦。然後執行:
./configure --prefix=/path/u/what/to/installnmakenmake installn
第一條命令的 --prefix= 後面是你想要安裝的位置,你可以自行調整。等待運行完畢,就安裝好啦,進入指定的目錄,目錄結構如下:
.n├── binn├── includen├── libn└── sharen
想要運行的話,執行 bin/python 即可,你也可以將其加入到 PATH 中,不過還是不建議去搞亂系統那個。好了,用我們自己編譯的解釋器執行幾條語句吧:
>>> print TruenFalsenn>>> print FalsenTruenn>>> print 3 > 5 nTruenn>>> print 1 == 2nTruen
很明顯,已經「顛倒黑白」啦。
推薦閱讀:
※Python 初學者想通過 Django 框架寫一個博客,一個月內完成任務,大致的學習路線怎麼安排?
※如何去尋找網路爬蟲的需求?
※深度學習基礎之Numpy教程
※Python-Excel 模塊哪家強?
※10道Python小題