python如何運行程序


python運行機制

  python作為一種動態語言,其實是一個解釋器軟件包。當Python運行腳本時,在代碼開始進行處理之前,Python還會執行一些步驟。第一步是編譯成所謂的“字節碼”,如果Python進程擁有寫入權限,將把程序的字節碼保存為一個以.pyc為擴展名的文件, 如果Python無法在機器上寫入字節碼,程序仍然可以工作:字節碼將會在內存中生成並在程序結束時簡單地丟棄。一旦程序編譯成字節碼(或字節碼從已經存在的.pyc文件中載入),之后的字節碼發送到通常稱為Python虛擬機(Python VirtualMachine,簡寫為PVM)上來執行。PVM不是一個獨立的程序,是Python的運行引擎,不需要安裝。事實上PVM就是迭代運行字節碼指令的一個大循環,一個接一個地完成操作。

  因此Python具有更多的動態語言特性:在運行時,Python程序去構建並執行另一個Python程序是有可能的,而且往往是非常方便的。例如,eval和exec內置模塊,能夠接受並運行包含Python程序代碼的字符串。使用如下代碼可以查看add函數的字節碼:

import dis

def add(a,b):
    sum=a+b
    return sum

print(dis.dis(add))
View Code

主要的python解釋器

CPython

  當我們從Python官方網站下載並安裝好Python 3.x后,我們就直接獲得了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,所以叫CPython。在命令行下運行python就是啟動CPython解釋器。CPython是使用最廣的Python解釋器,也是默認的python解釋器。

IPython

  IPython是基於CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所增強,但是執行Python代碼的功能和CPython是完全一樣的。好比很多國產瀏覽器雖然外觀不同,但內核其實都是調用了IE。CPython用>>>作為提示符,而IPython用In [序號]:作為提示符。

PyPy

  PyPy是另一個Python解釋器,它的目標是執行速度。PyPy采用JIT技術,對Python代碼進行動態編譯(注意不是解釋),所以可以顯著提高Python代碼的執行速度。

絕大部分Python代碼都可以在PyPy下運行,但是PyPy和CPython有一些是不同的,這就導致相同的Python代碼在兩種解釋器下執行可能會有不同的結果。

Jython

Jython是運行在Java平台上的Python解釋器,可以直接把Python代碼編譯成Java字節碼執行。Jython腳本可以應用於開發Web applet和servlet,建立基於Java的GUI。此外,Jython具有集成支持的功能,允許導入Python代碼或使用Java的類。因為Jython要比CPython慢而且也不夠健壯,它往往看做是一個主要面向尋找Java代碼前端腳本語言的Java開發者的一個有趣的工具。

IronPython

IronPython和Jython類似,只不過IronPython是運行在微軟.Net平台上的Python解釋器,可以直接把Python代碼編譯成.Net的字節碼。

生成獨立運行程序

  借助一些第三方工具Python程序可以生成獨立的可執行二進制代碼文件進行分發。這些第三方工具能夠將程序的字節碼、PVM(解釋器)以及任何程序所需要的Python支持文件捆綁在一起形成一個單獨的文件。,主要有三種工具:py2exe(Windows下使用)、PyInstaller(和py2exe類似,它能夠在Linux及UNIX上使用,並且能夠生成自安裝的獨立執行程序)以及freeze(最初始的版本)。  

  py2exe具體使用可以參考:https://blog.csdn.net/bruce_6/article/details/82906444

  PyInstaller具體使用可以參考:https://blog.csdn.net/weixin_37292229/article/details/78970664

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM