2010-05-09 175 views
21

我維護一些Python包。我有一個非常相似的setup.py文件爲他們每個人。但是,在做setup.py install時,我的一個軟件包被安裝爲一個蛋,而其他軟件被安裝爲「蛋文件夾」,即擴展名爲「蛋」的文件夾。Python:爲什麼有些軟件包被安裝成雞蛋,有些軟件包被安裝成「蛋文件夾」?

他們之間的區別是什麼導致這種不同的行爲?

+0

(我在Windows XP上。) – 2010-05-09 17:09:34

回答

22

如果zip-safe存在,這意味着當爲.egg壓縮文件安裝項目將正常工作,而相反的not-zip-safe的存在意味着該項目不應該被安裝爲.egg文件[即。作爲.egg目錄]。 setuptools'setup()zip_safe選項確定將寫入哪個文件。如果沒有提供選項,setuptools會根據代碼和內容分析嘗試自行評估軟件包是否可以工作。

+7

是什麼使項目安全可靠?你爲什麼要選擇一個或另一個? (我問是否有人打包一個項目。) – 2012-03-09 17:31:58

+2

來自setuptools文檔:http://peak.telecommunity.com/DevCenter/setuptools#setting-the-zip-safe-flag – saffsd 2013-04-08 00:15:30

4

一個雞蛋文件實際上是一個內部具有特定目錄結構的zip文件。根據zipimport文檔,只能從zip文件導入.py,.pyc.pyo文件。因此,如果程序包需要導入其他類型的模塊資源(如編譯後的c代碼; .so文件,.pyd文件),它將不能用作zip文件。

我不知道這是否是只有有理由認爲有些雞蛋不能用作zip壓縮文件,但我認爲這是主要原因。

+0

這不是主要原因。這甚至不是一個正確的理由。 setuptools增加了特殊的加載器,使.so和.pyd文件即使在壓縮的蛋中也能正常工作。另一個答案是正確的。 – 2010-05-24 16:05:07