如何打包Python Web項(xiàng)目實(shí)現(xiàn)免安裝一鍵啟動的方法
一、現(xiàn)狀
Python 有諸多優(yōu)秀的 Web 開發(fā)框架供我們使用,比如Django、Flask、Sanic。正常的情況下,我們基于這些 Web 框架開發(fā)好了網(wǎng)站,最終都會使用 Nginx 搭配 uWSGI 或gunicorn 將其部署在 Linux 服務(wù)器上,這樣,用戶就可以通過 綁定的域名或 IP 地址訪問。
是的,這是正常的情況。
往往很多場景,我們面對的就不是一個正常的情況。正常的情況下一切環(huán)境的問題都不是問題,因?yàn)橛羞\(yùn)維的伙伴幫我們處理好了所有環(huán)境的問題,從Python特定版本的安裝,到特定依賴庫的安裝,再到服務(wù)的配置。一切都不需要操心。
但是,如果所有的這些問題都需要自己操心呢?那可真是一個災(zāi)難性的問題。 Docker的出現(xiàn)解決了一部分的問題,但是對于完全小白而言,docker的安裝和使用,又成為了一個問題。
州的先生在開發(fā)MrDoc覓道文檔的時候,就遇到了這個問題。如果要源碼安裝 MrDoc,那么需要:
- 安裝Python(基本不會出問題)
- pip安裝依賴庫(非常容易出問題)
- 安裝依賴的第三方軟件包(非常容易出問題)
很多想體驗(yàn)一下 MrDoc 的小伙伴, 直接就死在了第二步 ,各種報(bào)錯無所適從。
有 MrDoc 交流群里的熱心伙伴制作了docker鏡像,這解決了一定的環(huán)境問題,但是 對于真正零基礎(chǔ)的計(jì)算機(jī)小白而言,命令行還是自帶恐懼屬性。
怎么辦呢? 能不能讓Python編寫的Web項(xiàng)目像 PHP 或GO 語言編寫的Web服務(wù)一樣可以直接啟動呢?
在互聯(lián)網(wǎng)上逛蕩了老半天,發(fā)現(xiàn)老伙計(jì)——PyInstaller可以實(shí)現(xiàn)這個功能。
二、打包
PyInstaller是Python中一個用于將Python程序打包為可執(zhí)行文件的第三方模塊。 州的先生之前經(jīng)常使用它將PyQt5編寫的桌面圖形界面程序打包分發(fā)。來看看它在打包Web程序上的應(yīng)用。
PyInstaller官方提供了一個打包Django項(xiàng)目的文檔,其鏈接為: https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Executable-From-Django
按照這個文檔,我們根據(jù)項(xiàng)目的具體情況,運(yùn)行下述命令:
<span><span style="font-size: 14px;"> pyinstaller --name=mysite mysite/manage.py </span> </span>
就會得到一個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)行不起來的,報(bào)錯的信息,不是缺少模塊,就是缺少靜態(tài)文件。
我們需要顯式地告訴PyInstaller,哪些包、哪些模塊、哪些文件需要一起打包進(jìn)去。
在上一次運(yùn)行 pyinstaller 命令之后,文件夾下會生成一個 .spec后綴的配置文件 ,其實(shí)質(zhì)是一個Python文件,我們對其進(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索引模塊層級的錯誤 。
然后,在datas列表中, 將Django項(xiàng)目的靜態(tài)文件目錄、媒體文件目錄、以及其他使用到的文件目錄全都以元組的形式添加進(jìn)去。 這會讓PyInstaller直接將這些文件打包到最后生成的文件夾中。
接著,在hidedenimports列表中, 將Django項(xiàng)目的應(yīng)用模塊路徑也添加進(jìn)去。 可以根據(jù)每次生成的報(bào)錯來一個一個添加,但是那樣太浪費(fèi)時間了,還不如直接都添加進(jìn)去。
修改好了之后,我們把之前生成的build目錄和dist目錄刪除,使用spec文件調(diào)用Pyinstaller命令:
<span> <span style="font-size: 14px;">pyinstaller MrDoc.spec </span> </span>
等待一會兒,整個Django項(xiàng)目就打包好了,其完整的打包文件如下所示:
三、效果
打包好之后,我們打開命令行界面,輸入命令:
<span> <span style="font-size: 14px;"> mrdoc.exe runserver </span> </span>
就啟動了Django Web網(wǎng)站,如下圖所示:
在瀏覽器上訪問: 127.0.0.1:8000 就可以看到我們的MrDoc覓道文檔了:
為了方便使用,我們還可以寫一個bat腳本,雙擊即可啟動它,免去打開命令行界面輸入命令的繁瑣:
<span> <span style="font-size: 14px;"> start ./mrdoc.exe runserver </span> </span>
這樣,一個 免安裝、一鍵啟動的Django網(wǎng)站應(yīng)用 就打包制作完成了。
總結(jié)
到此這篇關(guān)于如何打包Python Web項(xiàng)目實(shí)現(xiàn)免安裝一鍵啟動的方法的文章就介紹到這了,更多相關(guān)打包Python Web項(xiàng)目內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 快速一鍵生成Python爬蟲請求頭
- 使用Python制作一個數(shù)據(jù)預(yù)處理小工具(多種操作一鍵完成)
- 利用Python代碼實(shí)現(xiàn)一鍵摳背景功能
- Ubuntu18.04 一鍵升級Python所有第三方包 及安裝python包的方法
- Python一鍵安裝全部依賴包的方法
- Python一鍵查找iOS項(xiàng)目中未使用的圖片、音頻、視頻資源
- Python 一鍵獲取百度網(wǎng)盤提取碼的方法
- Python 一鍵制作微信好友圖片墻的方法
- Python字典循環(huán)添加一鍵多值的用法實(shí)例
- Python趣味爬蟲之用Python實(shí)現(xiàn)智慧校園一鍵評教
相關(guān)文章
python爬蟲把url鏈接編碼成gbk2312格式過程解析
這篇文章主要介紹了python爬蟲把url鏈接編碼成gbk2312格式過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06使用Python+Flask開發(fā)博客項(xiàng)目并實(shí)現(xiàn)內(nèi)網(wǎng)穿透
Flask是一個使用python編寫的輕量級Web框架,這篇文章我們將使用這個框架編寫一個屬于自己的博客網(wǎng)站!并教你如何通過使用內(nèi)網(wǎng)穿透工具處理項(xiàng)目,讓本地的項(xiàng)目可以在公網(wǎng)訪問,感興趣的可以了解一下2021-11-11PyTorch模型創(chuàng)建與nn.Module構(gòu)建
這篇文章主要為大家介紹了PyTorch模型創(chuàng)建與nn.Module構(gòu)建示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07高性能web服務(wù)器框架Tornado簡單實(shí)現(xiàn)restful接口及開發(fā)實(shí)例
Tornado和現(xiàn)在的主流Web服務(wù)器框架(包括大多數(shù)Python的框架)有著明顯的區(qū)別:它是非阻塞式服務(wù)器,而且速度相當(dāng)快。得利于其 非阻塞的方式和對epoll的運(yùn)用,Tornado每秒可以處理數(shù)以千計(jì)的連接,這意味著對于實(shí)時Web服務(wù)來說,Tornado是一個理想的Web框架。2014-07-07python3.6使用tkinter實(shí)現(xiàn)彈跳小球游戲
這篇文章主要為大家詳細(xì)介紹了python3.6使用tkinter實(shí)現(xiàn)彈跳小球游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-05-05使用Python和XPath解析動態(tài)JSON數(shù)據(jù)的操作指南
JSON動態(tài)數(shù)據(jù)在Python中扮演著重要的角色,為開發(fā)者提供了處理實(shí)時和靈活數(shù)據(jù)的能力,動態(tài)JSON數(shù)據(jù)的獲取可能涉及到網(wǎng)絡(luò)請求和API調(diào)用,可以使用Python和XPath來解析動態(tài)JSON數(shù)據(jù),接下來小編就給大家介紹一下操作步驟2023-09-09使用Anaconda3建立虛擬獨(dú)立的python2.7環(huán)境方法
今天小編就為大家分享一篇使用Anaconda3建立虛擬獨(dú)立的python2.7環(huán)境方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06淺談Python中重載isinstance繼承關(guān)系的問題
本篇文章主要介紹了淺談Python中重載isinstance繼承關(guān)系的問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05基于Python OpenCV實(shí)現(xiàn)圖像的覆蓋
本文將基于Python、OpenCV和Numpy實(shí)現(xiàn)圖像的覆蓋,即小圖像覆蓋在大圖像上。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-02-02