2014-03-19 37 views
0

這不是一個語言比較問題,就像在各種論壇上提問一樣。我有興趣知道更多特定的術語核心庫/模塊調用/在Python中執行。php比較python核心庫的角度

當我檢查像/usr/lib/python2.7(在Ubuntu上)的python模塊安裝目錄。我發現.py(源代碼)和.pyc(字節代碼)。當我們使用import語句或更具體地稱爲來自該模塊的類/函數時,我假定Python解釋器/編譯器調用.pyc文件。

雖然php使用.so(共享對象)文件庫。正如我在/ usr/lib/php5/20090626上看到的那樣。是的,Python對於.so文件也有一個目錄/usr/lib/pyshared/python2.7。但仍有很多重要的庫存儲爲.pyc文件。

對於像php這樣的核心庫,只使用.so擴展來獲得性能優勢不是一個好主意嗎?

+0

我在想如果python喜歡像JAVA世界那裏的jvm讀取.class/.jar文件而不是編譯的版本,但我不確定是否Java核心模塊不是本地編譯的。 –

回答

1

.py文件即時編譯爲.pyc文件,如果它比.py文件更新,則使用.pyc。
某些模塊可以用C/C++編寫,然後它們以.so文件形式提供。

+0

我知道pyc文件。我的意思是,即使對於很多核心模塊,仍然是python進行字節碼讀取。對於第三方模塊/應用程序,這是可以理解的但是對於核心模塊,如果使用.so編譯版本,會出現什麼問題。 –

+0

@ kuldeep.kamboj CPython是一名口譯員。它不生成本地代碼。 .so文件是本地代碼;與Python一起寫的是用C編寫的。 –

+0

@JanneKarila在/usr/lib/python2.7/目錄中,我找到了popen2.pyc,socket.pyc,urllib2.pyc等等。如果它們不是python默認安裝的核心庫。仍然是我的問題是相同的cpython可以爲用戶的應用程序生成pyc,這是可以理解的,但對於popen,urllib2,socket本地編譯版本等核心模塊可以使用python默認安裝進行分發。在PHP中,我們甚至沒有類似於pyc的字節編譯文件,所以php intepreter讀取/解析php文件。但對於核心庫,沒有.php或字節編譯版本,但使用了.so版本。 –