如何打包Python Web項目,實現(xiàn)免安裝一鍵啟動?
一、現(xiàn)狀
Python 有諸多優(yōu)秀的 Web 開發(fā)框架供我們使用,比如Django、Flask、Sanic。正常的情況下,我們基于這些 Web 框架開發(fā)好了網(wǎng)站,最終都會使用 Nginx 搭配 uWSGI 或gunicorn 將其部署在 Linux 服務(wù)器上,這樣,用戶就可以通過 綁定的域名或 IP 地址訪問。
是的,這是正常的情況。
往往很多場景,我們面對的就不是一個正常的情況。正常的情況下一切環(huán)境的問題都不是問題,因為有運維的伙伴幫我們處理好了所有環(huán)境的問題,從Python特定版本的安裝,到特定依賴庫的安裝,再到服務(wù)的配置。一切都不需要操心。
但是,如果所有的這些問題都需要自己操心呢?那可真是一個災(zāi)難性的問題。Docker的出現(xiàn)解決了一部分的問題,但是對于完全小白而言,docker的安裝和使用,又成為了一個問題。
州的先生在開發(fā)MrDoc覓道文檔的時候,就遇到了這個問題。如果要源碼安裝 MrDoc,那么需要:
安裝Python(基本不會出問題)
pip安裝依賴庫(非常容易出問題)
安裝依賴的第三方軟件包(非常容易出問題)
很多想體驗一下 MrDoc 的小伙伴,直接就死在了第二步,各種報錯無所適從。
有 MrDoc 交流群里的熱心伙伴制作了docker鏡像,這解決了一定的環(huán)境問題,但是對于真正零基礎(chǔ)的計算機小白而言,命令行還是自帶恐懼屬性。

怎么辦呢?能不能讓Python編寫的Web項目像 PHP 或GO 語言編寫的Web服務(wù)一樣可以直接啟動呢?
在互聯(lián)網(wǎng)上逛蕩了老半天,發(fā)現(xiàn)老伙計——PyInstaller可以實現(xiàn)這個功能。
二、打包
PyInstaller是Python中一個用于將Python程序打包為可執(zhí)行文件的第三方模塊。州的先生之前經(jīng)常使用它將PyQt5編寫的桌面圖形界面程序打包分發(fā)。來看看它在打包Web程序上的應(yīng)用。
PyInstaller官方提供了一個打包Django項目的文檔,其鏈接為:https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Executable-From-Django
按照這個文檔,我們根據(jù)項目的具體情況,運行下述命令:
pyinstaller --name=mysite mysite/manage.py就會得到一個dist文件夾,里面包含了運行Django項目的所有文件,我們打開命令行界面,使用xxx.exe文件就可以達到像正常使用:
python manage.py一樣的效果。比如運行runserver服務(wù):xxx.exe?runserver但是,很大概率是運行不起來的,報錯的信息,不是缺少模塊,就是缺少靜態(tài)文件。
我們需要顯式地告訴PyInstaller,哪些包、哪些模塊、哪些文件需要一起打包進去。
在上一次運行 pyinstaller 命令之后,文件夾下會生成一個.spec后綴的配置文件,其實質(zhì)是一個Python文件,我們對其進行修改。
import syssys.setrecursionlimit(5000)
在文件第3行的位置,添加上述2行代碼,用于避免pyinstaller索引模塊層級的錯誤。

然后,在datas列表中,將Django項目的靜態(tài)文件目錄、媒體文件目錄、以及其他使用到的文件目錄全都以元組的形式添加進去。這會讓PyInstaller直接將這些文件打包到最后生成的文件夾中。

接著,在hidedenimports列表中,將Django項目的應(yīng)用模塊路徑也添加進去。可以根據(jù)每次生成的報錯來一個一個添加,但是那樣太浪費時間了,還不如直接都添加進去。
修改好了之后,我們把之前生成的build目錄和dist目錄刪除,使用spec文件調(diào)用Pyinstaller命令:
pyinstaller MrDoc.spec等待一會兒,整個Django項目就打包好了,其完整的打包文件如下所示:

三、效果
打包好之后,我們打開命令行界面,輸入命令:
mrdoc.exe runserver就啟動了Django Web網(wǎng)站,如下圖所示:
在瀏覽器上訪問:127.0.0.1:8000?就可以看到我們的MrDoc覓道文檔了:

為了方便使用,我們還可以寫一個bat腳本,雙擊即可啟動它,免去打開命令行界面輸入命令的繁瑣:
start ./mrdoc.exe runserver這樣,一個免安裝、一鍵啟動的Django網(wǎng)站應(yīng)用就打包制作完成了。
點擊“閱讀原文”,可以獲取這個Windows免安裝便攜體驗版MrDoc的下載地址和詳細使用說明。
評論
圖片
表情
