聲明:本文僅限于簡書發(fā)布,其他第三方網站均為盜版,原文地址: 編譯 Python 開發(fā)環(huán)境
最近在探索 Python 的源碼饵隙,但是娶耍,發(fā)現瞎看也沒啥意思,所以就想折騰折騰。折騰的方式有很多何缓,例如可以修改源碼慨蛙,然后重新編譯,但是這樣玩對于探索來說周期似乎有點長,而且效果不明顯叁巨;而我選擇的是直接編寫 C++ 代碼贮勃,然后調用 Python 的 API泉孩,通過查看 Python API 來查看內部的結構/方法和數據狀態(tài)订咸,從而來發(fā)掘 Python 的一些實現原理神郊。
使用 Python API 雖然比較方便,但是還是有一些準備工作需要做的,這里先介紹一下我的軟件環(huán)境:
- OS
- Description: Ubuntu 16.04.2 LTS
- Codename: xenial
- Python
- Version:3.6.2
- Compiler
- g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
- GNU Make 4.1 Built for x86_64-pc-linux-gnu
編譯 Python 開發(fā)環(huán)境
其實很多同學都會選擇走一條捷徑拂玻,那就是使用包管理工具安裝,類似于:
apt install python-dev
這是一種方法,但是,使用這種方法不好控制 Python 的版本葵第,同時膛腐,我們如果要想修改一些代碼也不好改啊,所以還是從源碼來安裝會穩(wěn)健一些歌逢,可以保證我們用的就是我們看到的茬缩!
-
下載 Python3.6.2 源代碼
這個可以直接從 Python 的官方網站下載下來裕膀,或者你直接用我這個下載:Python3.6.2 源代碼
-
編譯源代碼
編譯我們可以以簡單的三部曲走,如果怕覆蓋以前的舊版本之內的挣惰,可以指定安裝目錄板乙,我這里為了方便,直接編譯了放接,不加附加參數:
$ tar zxf Python-3.6.2.tgz $ cd Python-3.6.2 $ ./configure --with-shared $ make && make install
然后就等待編譯安裝完成咯留特。
-
測試編譯代碼
編譯安裝完成之后,我們得驗證一下贺喝,是不是一切正常,所以寫段代碼試試:
這段代碼可以在我的 Github 代碼庫中找到:PythonAPI測試代碼
然后編譯看看篡帕,注意怔鳖,編譯的時候我們需要指定 Python 的頭文件和鏈接文件位置:
$ g++ -ggdb main.cpp -O1 $(python3-config --includes) $(python3-config --libs) $ ./a.out size of PyTupleObject: 16 3 (1, 2, 'three')
如果看到和我一致的輸出艾凯,那么說明你的 Python API 測試環(huán)境是 OK 的,后面我將用這個環(huán)境驗證和探索一些有趣的事情,可以期待一下衡招。