嘗試經過源碼本身編譯 Python,使用的系統是 Ubuntu14.04 LTS。python
首先去官網下載源碼,地址:源碼下載。下載完成以後,解壓源碼:ui
1code |
tar -zxvf Python-2.7.12.tgz對象 |
能夠看到目錄結構以下:get
1源碼 2編譯 3table 4變量 5object 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 |
其中,咱們比較關注的幾個目錄是:
我並不僅是想嘗試簡單的經過源碼編譯安裝,那麼,在編譯以前,咱們先對它作一點小小的改動吧。今天先不作太複雜的事情,嘗試一下「顛倒黑白」吧。所謂顛倒黑白,就是在輸出(只有輸出時)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 |
很明顯,已經「顛倒黑白」啦。