2009-10-13 72 views
75

我的應用程序是這樣的:如何分配python程序?

 
main.py 
windows/ 
    __init__.py 
    mainwindow.py 
    ... 
model/ 
    __init__.py 
    orders.py 
    ... 
resources/ 
    image1.png 
    logo.jpg 
    ... 

該計劃開始main.py.有沒有一種很好的方式來創建一個「最終」應用程序?我正在考慮類似py2exe/py2app的東西,但沒有將python解釋器/模塊複製到只有一個可執行文件的應用程序中。

我看了一下distutils,但是這看起來像是將程序安裝到Python目錄中,這在非Linux平臺上並不常見。

目前我只是將整個源文件夾複製到目標機器上,並在Windows上爲main.pyw創建一個別名。一些不便之處:

  • 該圖標是默認的python圖標。
  • 我必須手動創建別名。
  • 在我的源代碼目錄中有很多像源代碼管理文件夾的其他文件。
  • 我必須手動將main.py重命名爲main.pyw
  • 如果只有.pyo *文件在目標機器上,那將會很好。沒有真正的理由,我只是不喜歡有不必要的文件。

如何創建一個很好的自動分配?

  • for windows? (這是我目前唯一需要支持的平臺。)
  • for mac?
  • for linux?
+2

「我看了一下distutils的,但是這看起來像它安裝了一個程序到Python目錄,這是不常見的非Linux平臺。 」你爲什麼說?你讀過哪些文字呢?這當然是不真實的,你從哪裏得到這種印象? – 2009-10-13 10:58:55

+0

[用Python寫的分發程序]可能的重複(http://stackoverflow.com/questions/4190635/distributing-programs-written-in-python) – SebasSBM 2016-02-06 19:06:26

回答

29

分配Python應用程序的正常方式是distutils。它既用於分發庫類型的python模塊和python應用程序,儘管我不知道它如何在Windows上工作。無論如何,如果你使用distutils,你必須在Windows上單獨安裝Python。

我可能會建議你分發它disutils的Linux和Py2exe或類似的Windows。對於OS X我不知道。如果它是一個最終用戶應用程序,你可能需要一個磁盤映像類型的東西,我不知道該怎麼做。但請閱讀this post瞭解更多關於用戶體驗的信息。對於爲程序員編寫的應用程序,您也可以在OS X上安裝distutils類型。

+1

Mac和linux目前並不重要。 Py2app使.app捆綁。我認爲在.dmg中發送mac應用程序已過時,應該使用.zip。是否有可能使用distutils創建一個目錄dist並將所有相關文件複製到該目錄中? – 2009-10-13 06:03:59

+1

@gs:sdist命令將創建所有源文件的tar文件。 – 2009-10-13 06:07:17

+4

@gs:發貨.dmg中的Mac應用程序實際上非常普遍。 .dmg是磁盤映像,而不是應用程序的格式(即.app)。因此,您經常會在.dmg中找到一個.app文件,以及一些README文件。 – EOL 2009-10-13 06:49:28

1

如果您在Windows上發佈,請使用installer安裝所有相關文件/插入器,無論需要什麼。分發setup.exe。這是Windows上的最佳方式。否則用戶會抱怨。

+1

我不需要安裝程序,因爲只有一個用戶將要使用該程序。但當然,當編寫更多用戶的程序時,這是windows必備的。 – 2009-10-13 06:14:26

+1

@gs:哦,只有一個用戶。好吧,那麼我會建議製作一個基本的distutils軟件包,無論是源代碼分發還是Windows二進制安裝程序。這絕對是分發Python模塊的一種簡單且不錯的方式。 – 2009-10-13 07:08:39

47

我強烈建議Pyinstaller,它非常支持所有主流平臺。就像py2exe和py2app一樣,它在Windows上產生一個標準的可執行文件,在OS X上產生一個應用程序包,但是它也有很好的自動解決公共依賴的功能,並且不需要額外的配置調整。

另請注意,如果您將Python 2.6部署到Windows,則應將this patch應用於Pyinstaller中繼。

您表示您不需要安裝程序,但Inno Setup是一個易於使用且快速設置Windows平臺的選擇。

+0

對於這種情況的矯枉過正,因爲他只有一個用戶,但是通常我忘記了一個軟件的好建議。 +1 – 2009-10-13 07:09:59

+3

我不確定這是否過分。使用Pyinstaller捆綁應用程序實際上可能比其他方法更容易,尤其是那些對c擴展具有依賴性的方法......在大多數情況下,就像一行命令行調用一樣簡單。安裝Python +依賴關係+應用程序本身(無論是通過distutils等,還是隻是一個zip文件)都會涉及更多,特別是如果開發人員無法親自手動配置目標機器並需要向客戶端提供指示信息。 至少在Windows上,我認爲這種分配方式很有意義。 – 2009-10-13 09:48:45

+1

使用pyinstaller創建的可執行文件時,pyinstaller有點不方便,執行的開始需要幾秒鐘的時間。 – JuanPablo 2014-01-31 17:48:33

5

Fredrik Lundh的squeeze.py可以創建一個不包含Python解釋器但包含字節碼的文件。有了正確的參數,您可以在結果文件中包含其他文件,模塊等。我在一個項目中成功地使用了它。生成的程序在OS X,Linux和Windows上運行沒有任何問題!

PS:每臺機器都需要一個Python解釋器,它與squeeze.py生成的字節碼兼容。如果需要,您可以爲不同版本的Python生成不同的字節碼版本(只需使用正確版本的Python運行squeeze.py)。

+0

看起來很有希望,我會看看它。 – 2009-10-13 07:23:55