2011-01-14 51 views
5

我有一個奇怪的情況,我需要將Python源文件上傳到測試服務器以進行評估,但我希望將我的應用程序組織到多個文件/模塊/包中。不幸的是,測試服務器超出了我的控制範圍,所以我無法修改它以允許我上傳包含我的代碼的ZIP文件。將Python應用程序壓縮爲單個源文件

是否有任何簡單的方法可以將大量的Python源文件包含在應用程序中,並自動將它們還原爲單個源文件(或.pyc文件)?爲了簡單起見,只有一個文件將被視爲「入口點」並具有if __name__ == '__main__'。最終文件仍然需要由Python解釋器執行,所以我不能使用Python-to-EXE生成器。

回答

4

如果你不能上傳一個zip文件,也許你可以按照here的一些建議。這個想法是創建並上傳一個腳本文件,其中包含一個Python壓縮文件行(被解釋器忽略),並將其附加到一個zip文件壓縮文件中。然後,您可以讓Python解釋器直接讀取zip文件,或者從shell執行它。要做到這一點,你至少需要使用Python 2.6。

zip testapp.zip * 
echo '#!/usr/bin/env python' | cat - testapp.zip > testapp.py 
chmod 755 testapp.py 

既可以執行:

python testapp.py 

或:

./testapp.py 

正如在博客文章中討論,根據什麼版本的Python,你需要支持和你需要什麼功能,您可能需要對源代碼佈局進行各種調整,以包含必需的__main__.py文件和__init__.py文件以創建適當的包和cre在主包目錄之外吃了一個符號鏈接的__main__.py。這有點混亂,但一旦你得到它的工作,它應該很容易自動化,假設你的測試服務器可以處理這樣一個僞文本文件。這裏的關鍵洞察是,Python解釋器本身正在讀取和解壓zip壓縮文件,而不是外部程序。

如果測試服務器可以處理標準的POSIX shell腳本,另一個選擇可能是創建一個包裝一切都變成一個大的腳本中的一組這裏文件的腳本。

+0

+1很酷的把戲,我不知道這是可能的。 – plundra

+0

非常漂亮。但是,您的鏈接似乎已被破壞。那篇文章還在嗎? – Cerin

+0

對不起,後面的'l'丟失了,現在修復了。 –

相關問題