2013-02-11 80 views
1

我正在寫一個小型的Web應用程序,我想包括下載本身的能力。理想的解決方案是讓用戶能夠「點擊安裝」完整的應用程序,但應用程序的用戶將能夠下載它的一個版本來使用它們自己(也許具有減少的功能或沒有一些不太重要的依賴關係) 。Python網絡應用程序,可以下載本身

我正在使用Bottle,因爲我希望儘可能地使所有內容儘可能地靠近標準庫。用戶可能處於不同的平臺或Python版本,這是減少額外模塊使用的其他原因。 (儘管我會假設無論平臺是2.7還是3.3都會使用)。

我目前的想法是讓應用程序使用__file__或類似的和自我壓縮。它也可以使用setuptools/distribute並自己調用sdist。用戶然後可以執行該zip文件,或者使用源代碼發佈來安裝應用程序。 (理想情況下,我想提供這兩個選項)。

該應用程序將包括積極的導入檢查以回退到可用模塊,Bottle是唯一的要求(並且將包括在下載的文件中)。

任何人都可以想到一個強大的方法來提供這種功能?

更新:應用程序的用戶無法保證隨時都能訪問互聯網,因此需要能夠從以前安裝它的人那裏下載應用程序的版本。也不能假定Python的體驗,因此讓用戶運行python -m myApp.zip來運行他們自己的版本的想法。

更新二:由於python的體驗水平也無法保證,我希望最簡單的方式讓用戶獲得一個主要工作版本的應用程序。有經驗的用戶可以自由地通過安裝他們自己選擇的附加模塊來「升級」應用程序。絕大多數這些將是不同的服務器來承載從(CherryPy,扭曲等)的應用程序,因此不會嚴格地被視爲一個依賴項,而是一個「很高興有」。

更新III:根據以下答案,我將研究一個基於PyPI/buildout的解決方案,但仍會對是否存在針對上述方法的特定解決方案感興趣。

回答

3

只是打包你的應用程序,並把它放在PyPI上。嘗試自動打包運行在服務器上的代碼似乎過度設計。然後你可以讓人們使用點子來安裝你的應用程序。在您的應用中,提供一個指向PyPI頁面的鏈接。

然後你也可以在setup.py中添加依賴關係,並且pip會爲你安裝它們。看起來你正在試圖建立你自己的包裝基礎設施,但不一定。使用那裏的東西。

+0

問題在於,應用程序的用戶通常會在沒有互聯網訪問的環境中工作。雖然具有完全訪問權限的用戶可以從PyPI進行pip安裝,但我希望用戶能夠儘可能輕鬆地獲取版本,前提是他們無法訪問PyPI。 – Lllama 2013-02-11 17:38:07

+0

如果您爲PyPi構建&部署,PyPi只是託管一個sdist。就像Ned所說的那樣,除了任何依賴之外,你可以鏈接到那個sdist(你可以託管)。 --- 你也可以爲Linux/Win/Mac製作可執行文件。 StackOverflow上有很多答案。開始閱讀這一個... http://stackoverflow.com/questions/106725/how-to-bundle-a-python-application-including-dependencies-for-windows ---如果你想包括依賴關係常用術語是「捆綁」(應該有助於您的搜索)。我認爲這個項目可能適合你http://www.buildout。org – 2013-02-11 17:52:24

+0

如果我可以將sdist包含在從PyPI下載的sdist中,那麼我可以從應用程序中啓動sdist。我也可以包含不同平臺的可執行文件。捆綁也可以是一種選擇(並給我一個學習構建的機會)。 – Lllama 2013-02-11 18:07:56

相關問題