2013-04-17 70 views
5

如果我理解正確,Python編譯文件是跨平臺的。那麼爲什麼大多數圖書館都需要構建和安裝?爲什麼python庫不是以pyc的形式提供的?

它是懶惰的分配器的一部分,還是我錯在說,他們可以簡單地分配PYC文件?如果情況並非如此,那麼如何分發一個以庫爲先決條件的python腳本文件,而不需要用戶構建和安裝庫?

+5

而且,我認爲這是值得一提的是,只有業績增長你通過「編譯」得到的是在最初的「import」中。否則,一切都以完全相同的速度運行。換句話說,你不會注意到從pyc或py中運行的性能有差異。 – mgilson

回答

7

由於其中包含的代碼的格式可以與每個(主要)的Python釋放變化,而源代碼至少可以兼容。該格式還可以實現(其中有幾間不同,兩個最知名的是CPython and PyPy

更多信息請參見this article有關的pyc文件的內部結構。

4

他們是跨平臺的,但不是交叉版本,也不是交叉實現,換句話說,不同的CPython版本可能會遇到同一個.pyc文件的問題

如果你看看其他的實現,比如PyPy,IronPython,Jython等,你不會有pyc文件運氣的話。

此外,.pyc文件對應一個.py文件。你(可能)想到的是包含用C語言編寫的部分的庫。爲了工作,它們必須被編譯爲與平臺相關的文件(.pyd,.dll,.so等)。由於沒有多少開發者支持所有可用的平臺,他們將其作爲源提供,並將其留給用戶系統進行編譯。

+0

關於最後一部分的注意事項:擴展模塊的二進制分發是Windows上的常態,很少有人有編譯器。 – delnan

0

從.py文件創建.pyc文件文件的過程被解釋透明的完成。其原因一些安裝生成它們在安裝時純粹是爲了避免它們具有要產生的第一次運行腳本 - 通常爲速度的原因,也使得pyc文件可以在全系統(非用戶結束可寫)目錄。不像編譯語言或C語言編寫的,甚至Python模塊,它是,在第一個地方存在這些文件技術要求 - 如果是,你就不能直接把自己的腳本到python,並讓他們無需編譯步驟即可運行。

是嚴格要求那肯定是安裝前的生成步驟的任何圖書館編譯爲本地代碼的組件 - 這當然不是跨平臺的。對於任何純Python庫,它始終是足以使模塊的源目錄樹的地方在你的PYTHONPATH,已經直接從你下載了它在存檔複製它。

相關問題