程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Python >> Python源碼剖析之編譯Python

Python源碼剖析之編譯Python

編輯:Python

在剖析源碼的過程中,最好的學習方法是不斷根據掌握的知識修改Python源代碼,以印證自己的知識和猜想。

一、Python總體架構

  在最高的層次上,Python的整體架構可以分為三個主要部分,如上圖,左邊的Core Modules(內置模塊)、Library(庫)以及User-defined Modules(用戶自定義模塊)。

  在圖的右邊,是Python的運行時環境,包括對象/類型系統(Object/Type stuctures)、內存分配器(Memory Allocator)和運行時狀態信息(Current State of Python )。運行時狀態維護了解釋器在執行字節碼時不同的狀態(比如正常狀態和異常狀態)之間切換的動作,我們可以將它視為一個巨大而復雜的有窮狀態機。內存分配器則全權負責Python中創建對象時,對內存的申請工作,實際上它就是Python運行時與C中malloc的一層接口。而對象/類型系統則包含了Python中存在的各種內建對象,比如整數、list和dict,以及各種用戶自定義的類型和對象。

  中間的部分,是python的核心——解釋器(interpreter),也稱為虛擬機。在解釋器中,箭頭的方向指示了Python運行過程中的數據流方向。其中Scanner對應詞法分析,將文件輸入的Python源代碼或從命令行輸入的一行行Python代碼切分為一個個的token(指令): Parser對應語法分析,在Scanner的分析結果上進行語法分析,建立抽象語法樹(AST):Compiler(編譯器)是根據建立的AST生成指令集合——Python字節碼(byte code),最後由Code Evaluator來執行這些字節碼。因此,Code Evaluator又可以被稱為虛擬機。

  圖中,在解釋器與右邊的對象/類型系統、內存分配器之間的箭頭表示"使用"關系;而與運行時狀態之間的箭頭表示“修改”關系,即Python在執行的過程中會不斷地修改當前解釋器所處的狀態,在不同的狀態之間切換。

 

二、Python源代碼結構

  Python源碼下載地址:https://www.python.org/downloads/

  選擇相應的版本下載,本文以最新版Python3.5.1進行分析。  wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz

  下載了Python源碼並解壓後可以看到如下圖所示的目錄結構:

  

  Include:  該目錄下包含了Python提供的所有頭文件,如果用戶需要自己用C或C++來編寫自定義模塊擴展Python,就需要用到這裡提供的頭文件。

  Lib:    該目錄包含了Python自帶的所有標准庫,Lib中的庫都是用Python語言編寫的。

  Modules:  該目錄中包含了所有用C語言編寫的模塊,比如random、cStringIO等。Modules中的模塊是那些對速度要求非常嚴格的模塊,而有一些對速度沒有太嚴格要求的模塊,比如os,就是用Python編寫的,並且放在Lib目錄下。

  Parser:  該目錄中包含了Python解釋器中的Scanner和Parser部分,即對Python源代碼進行詞法分析和語法分析的部分。除了這些,Parse目錄下還包含了一些有用的工具,這些工具能夠根據Python語言的語法自動生成Python語言的詞法和語法分析器,與YACC非常類似。

  Objects:  該目錄中包含了所有Python的內建對象,包括整數、list、dict等。同時,該目錄還包括了Python在運行時需要的所有的內部使用對象的實現。

  Python:  該目錄下包含了Python解釋器中的Compiler和執行引擎部分,是Python運行的核心所在。

 

三、編譯安裝

  ./configure

  make all 

  make install

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved