2013-03-13 41 views
2

我在創建的應用程序中嵌入python,並且正在尋找一種方便的方式來分發Python代碼。我最近閱讀了大約zipimport,並認爲這將是一種方便的方式來分發我所有的Python代碼,而不是包含完全展開的樹。所以,我同樣設置了我的包,這樣的:使用distutils製作一個適合zipimport的包

. 
├── setup.py 
└── testpack 
    ├── __init__.py 
    └── pack1 
     ├── foo.py 
     └── __init__.py 

其中setup.py樣子:

from distutils.core import setup 

setup(
    name='testpack', 
    author='FatalError', 
    version='1.0', 
    packages=['testpack.pack1'] 
) 

,然後我跑python setup.py bdist --format=zip。但後來當我看到的zip的內容:

$ unzip -l testpack-1.0.linux-x86_64.zip 
Archive: testpack-1.0.linux-x86_64.zip 
    Length  Date Time Name 
--------- ---------- ----- ---- 
     183 2013-03-13 10:47 usr/local/lib/python2.7/dist-packages/testpack-1.0.egg-info 
     152 2013-03-13 10:47 usr/local/lib/python2.7/dist-packages/testpack/pack1/__init__.pyc 
     181 2013-03-13 10:47 usr/local/lib/python2.7/dist-packages/testpack/pack1/foo.pyc 
     0 2013-03-13 10:41 usr/local/lib/python2.7/dist-packages/testpack/pack1/__init__.py 
     33 2013-03-13 10:41 usr/local/lib/python2.7/dist-packages/testpack/pack1/foo.py 
---------      ------- 
     549      5 files 

顯然,結果是(不那麼令人驚訝的)不適合與zipimport使用。相反,這是一個zip解壓縮檔案,其目的是在/解壓縮以安裝該軟件包。

有沒有什麼辦法讓distutils(或setuptools等)代替構建軟件包,以便它可以與zipimport一起使用?由於我擁有的代碼實際上是特定於應用程序的,因此它不屬於安裝到系統庫中。

我意識到我可以自己編寫腳本,但是,那麼有趣的是什麼?例如,我想確保一切都是預編譯的,我的軟件包包含一個不打算分發的單元測試包。所以,我希望這些工具中的一種可以爲我做到這一點。

回答

1

egg檔案是zipimport功能(除非相反標記,在這種情況下,他們將在安裝過程中解壓縮)。使用python setup.py bdist --formats=egg

+0

這是否假設'setuptools'? 「雞蛋」對我來說聽起來不錯,但我不認爲'distutils'能夠讓它們成爲現實。 – FatalError 2013-03-13 15:13:55

+1

如果我從'setuptools'中導入'setup',可以工作。 – FatalError 2013-03-13 15:26:50

0

distutils的bdist格式並非設計用於生成直接可導入的zip文件,而是可以手動或通過像pip這樣的工具下載和安裝的發行版。您可以使用輪子(格式取代雞蛋),或使用distutils創建pyc文件,然後手動壓縮build/mypackage目錄並將其發送。