如何打包Python Web項(xiàng)目實(shí)現(xiàn)免安裝一鍵啟動(dòng)的方法
一、現(xiàn)狀
Python 有諸多優(yōu)秀的 Web 開發(fā)框架供我們使用,比如Django、Flask、Sanic。正常的情況下,我們基于這些 Web 框架開發(fā)好了網(wǎng)站,最終都會(huì)使用 Nginx 搭配 uWSGI 或gunicorn 將其部署在 Linux 服務(wù)器上,這樣,用戶就可以通過(guò) 綁定的域名或 IP 地址訪問(wèn)。

是的,這是正常的情況。
往往很多場(chǎng)景,我們面對(duì)的就不是一個(gè)正常的情況。正常的情況下一切環(huán)境的問(wèn)題都不是問(wèn)題,因?yàn)橛羞\(yùn)維的伙伴幫我們處理好了所有環(huán)境的問(wèn)題,從Python特定版本的安裝,到特定依賴庫(kù)的安裝,再到服務(wù)的配置。一切都不需要操心。
但是,如果所有的這些問(wèn)題都需要自己操心呢?那可真是一個(gè)災(zāi)難性的問(wèn)題。 Docker的出現(xiàn)解決了一部分的問(wèn)題,但是對(duì)于完全小白而言,docker的安裝和使用,又成為了一個(gè)問(wèn)題。

州的先生在開發(fā)MrDoc覓道文檔的時(shí)候,就遇到了這個(gè)問(wèn)題。如果要源碼安裝 MrDoc,那么需要:
- 安裝Python(基本不會(huì)出問(wèn)題)
- pip安裝依賴庫(kù)(非常容易出問(wèn)題)
- 安裝依賴的第三方軟件包(非常容易出問(wèn)題)
很多想體驗(yàn)一下 MrDoc 的小伙伴, 直接就死在了第二步 ,各種報(bào)錯(cuò)無(wú)所適從。
有 MrDoc 交流群里的熱心伙伴制作了docker鏡像,這解決了一定的環(huán)境問(wèn)題,但是 對(duì)于真正零基礎(chǔ)的計(jì)算機(jī)小白而言,命令行還是自帶恐懼屬性。

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

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

接著,在hidedenimports列表中, 將Django項(xiàng)目的應(yīng)用模塊路徑也添加進(jìn)去。 可以根據(jù)每次生成的報(bào)錯(cuò)來(lái)一個(gè)一個(gè)添加,但是那樣太浪費(fèi)時(shí)間了,還不如直接都添加進(jìn)去。
修改好了之后,我們把之前生成的build目錄和dist目錄刪除,使用spec文件調(diào)用Pyinstaller命令:
<span> <span style="font-size: 14px;">pyinstaller MrDoc.spec </span> </span>
等待一會(huì)兒,整個(gè)Django項(xiàng)目就打包好了,其完整的打包文件如下所示:

三、效果
打包好之后,我們打開命令行界面,輸入命令:
<span> <span style="font-size: 14px;"> mrdoc.exe runserver </span> </span>
就啟動(dòng)了Django Web網(wǎng)站,如下圖所示:

在瀏覽器上訪問(wèn): 127.0.0.1:8000 就可以看到我們的MrDoc覓道文檔了:

為了方便使用,我們還可以寫一個(gè)bat腳本,雙擊即可啟動(dòng)它,免去打開命令行界面輸入命令的繁瑣:
<span> <span style="font-size: 14px;"> start ./mrdoc.exe runserver </span> </span>
這樣,一個(gè) 免安裝、一鍵啟動(dòng)的Django網(wǎng)站應(yīng)用 就打包制作完成了。
總結(jié)
到此這篇關(guān)于如何打包Python Web項(xiàng)目實(shí)現(xiàn)免安裝一鍵啟動(dòng)的方法的文章就介紹到這了,更多相關(guān)打包Python Web項(xiàng)目?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 快速一鍵生成Python爬蟲請(qǐng)求頭
- 使用Python制作一個(gè)數(shù)據(jù)預(yù)處理小工具(多種操作一鍵完成)
- 利用Python代碼實(shí)現(xiàn)一鍵摳背景功能
- Ubuntu18.04 一鍵升級(jí)Python所有第三方包 及安裝python包的方法
- Python一鍵安裝全部依賴包的方法
- Python一鍵查找iOS項(xiàng)目中未使用的圖片、音頻、視頻資源
- Python 一鍵獲取百度網(wǎng)盤提取碼的方法
- Python 一鍵制作微信好友圖片墻的方法
- Python字典循環(huán)添加一鍵多值的用法實(shí)例
- Python趣味爬蟲之用Python實(shí)現(xiàn)智慧校園一鍵評(píng)教
相關(guān)文章
tensorflow實(shí)現(xiàn)簡(jiǎn)單邏輯回歸
邏輯回歸是一種分類器模型,這篇文章主要介紹了tensorflow實(shí)現(xiàn)簡(jiǎn)單邏輯回歸,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09
Python編程快速上手——瘋狂填詞程序?qū)崿F(xiàn)方法分析
這篇文章主要介紹了Python瘋狂填詞程序?qū)崿F(xiàn)方法,結(jié)合具體案例形式分析了Python填詞算法相關(guān)的文件讀寫、正則匹配、數(shù)據(jù)遍歷等操作技巧,需要的朋友可以參考下2020-02-02
Python設(shè)計(jì)模式之迭代器模式原理與用法實(shí)例分析
這篇文章主要介紹了Python設(shè)計(jì)模式之迭代器模式原理與用法,結(jié)合具體實(shí)例形式分析了迭代器模式的概念、原理、定義及使用方法,代碼注釋說(shuō)明簡(jiǎn)單易懂,需要的朋友可以參考下2019-01-01
python實(shí)現(xiàn)自動(dòng)登錄人人網(wǎng)并采集信息的方法
這篇文章主要介紹了python實(shí)現(xiàn)自動(dòng)登錄人人網(wǎng)并采集信息的方法,涉及Python模擬登陸及正則匹配的相關(guān)技巧,需要的朋友可以參考下2015-06-06
selenium+python實(shí)現(xiàn)自動(dòng)化登錄的方法
這篇文章主要介紹了selenium+python實(shí)現(xiàn)自動(dòng)化登錄的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
Python修改IP地址的常見(jiàn)方法總結(jié)
在網(wǎng)絡(luò)編程中,可能會(huì)遇到需要修改IP地址的情況,Python提供了一些功能強(qiáng)大的庫(kù)和模塊,可以幫助我們實(shí)現(xiàn)IP地址的修改操作,本文將介紹幾種常見(jiàn)的方法,以及如何使用它們來(lái)修改IP地址,需要的朋友可以參考下2023-12-12
使用Docker制作Python環(huán)境連接Oracle鏡像
這篇文章主要為大家介紹了使用Docker制作Python環(huán)境連接Oracle鏡像示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
python?查看cpu的核數(shù)實(shí)現(xiàn)
這篇文章主要介紹了python?查看cpu的核數(shù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05

