【Python源碼探析】編譯 Python 開發(fā)環(huán)境

聲明:本文僅限于簡書發(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)健一些歌逢,可以保證我們用的就是我們看到的茬缩!

  1. 下載 Python3.6.2 源代碼

    這個可以直接從 Python 的官方網站下載下來裕膀,或者你直接用我這個下載:Python3.6.2 源代碼

  2. 編譯源代碼

    編譯我們可以以簡單的三部曲走,如果怕覆蓋以前的舊版本之內的挣惰,可以指定安裝目錄板乙,我這里為了方便,直接編譯了放接,不加附加參數:

    $ tar zxf Python-3.6.2.tgz
    $ cd Python-3.6.2
    $ ./configure --with-shared
    $ make && make install
    

    然后就等待編譯安裝完成咯留特。

  3. 測試編譯代碼

    編譯安裝完成之后,我們得驗證一下贺喝,是不是一切正常,所以寫段代碼試試:

    這段代碼可以在我的 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)境驗證和探索一些有趣的事情,可以期待一下衡招。

Reference

  1. Calling python from a c++ program for distribution
  2. Python/C API Reference Manual
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市每强,隨后出現的幾起案子始腾,更是在濱河造成了極大的恐慌州刽,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浪箭,死亡現場離奇詭異穗椅,居然都是意外死亡,警方通過查閱死者的電腦和手機奶栖,發(fā)現死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門匹表,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宣鄙,你說我怎么就攤上這事袍镀。” “怎么了冻晤?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵苇羡,是天一觀的道長。 經常有香客問我鼻弧,道長设江,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任攘轩,我火速辦了婚禮叉存,結果婚禮上,老公的妹妹穿的比我還像新娘撑刺。我一直安慰自己鹉胖,他們只是感情好,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布够傍。 她就那樣靜靜地躺著甫菠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪冕屯。 梳的紋絲不亂的頭發(fā)上寂诱,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音安聘,去河邊找鬼痰洒。 笑死,一個胖子當著我的面吹牛浴韭,可吹牛的內容都是我干的丘喻。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼念颈,長吁一口氣:“原來是場噩夢啊……” “哼泉粉!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤嗡靡,失蹤者是張志新(化名)和其女友劉穎跺撼,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體讨彼,經...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡歉井,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了哈误。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哩至。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖黑滴,靈堂內的尸體忽然破棺而出憨募,到底是詐尸還是另有隱情,我是刑警寧澤袁辈,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布菜谣,位于F島的核電站,受9級特大地震影響晚缩,放射性物質發(fā)生泄漏尾膊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一荞彼、第九天 我趴在偏房一處隱蔽的房頂上張望冈敛。 院中可真熱鬧,春花似錦鸣皂、人聲如沸抓谴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽癌压。三九已至,卻和暖如春荆陆,著一層夾襖步出監(jiān)牢的瞬間滩届,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工被啼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留帜消,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓浓体,卻偏偏與公主長得像泡挺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子命浴,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內容

  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,452評論 6 428
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,781評論 25 707
  • 環(huán)境管理管理Python版本和環(huán)境的工具粘衬。p–非常簡單的交互式python版本管理工具。pyenv–簡單的Pyth...
    MrHamster閱讀 3,788評論 1 61
  • GitHub 上有一個 Awesome - XXX 系列的資源整理,資源非常豐富,涉及面非常廣稚新。awesome-p...
    若與閱讀 18,629評論 4 418
  • 古人曰:多事之秋,也不知為什么古人會說秋天是多事的跪腹。只是我似乎不光是秋天褂删,今年自從搬家以后,事情都沒有斷過冲茸。 這回...
    青可路香閱讀 245評論 2 2