<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何打包Python Web項目,實現(xiàn)免安裝一鍵啟動?

          共 1857字,需瀏覽 4分鐘

           ·

          2020-05-21 23:20

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

          96d33b1bee4828f0d843855263b911cd.webp
          是的,這是正常的情況。

          往往很多場景,我們面對的就不是一個正常的情況。正常的情況下一切環(huán)境的問題都不是問題,因為有運維的伙伴幫我們處理好了所有環(huán)境的問題,從Python特定版本的安裝,到特定依賴庫的安裝,再到服務(wù)的配置。一切都不需要操心。
          但是,如果所有的這些問題都需要自己操心呢?那可真是一個災(zāi)難性的問題。Docker的出現(xiàn)解決了一部分的問題,但是對于完全小白而言,docker的安裝和使用,又成為了一個問題。
          f06f509cf8f3b13e7685924b3e864915.webp
          州的先生在開發(fā)MrDoc覓道文檔的時候,就遇到了這個問題。如果要源碼安裝 MrDoc,那么需要:

          • 安裝Python(基本不會出問題)

          • pip安裝依賴庫(非常容易出問題)

          • 安裝依賴的第三方軟件包(非常容易出問題)


          很多想體驗一下 MrDoc 的小伙伴,直接就死在了第二步,各種報錯無所適從。
          有 MrDoc 交流群里的熱心伙伴制作了docker鏡像,這解決了一定的環(huán)境問題,但是對于真正零基礎(chǔ)的計算機小白而言,命令行還是自帶恐懼屬性。
          0b1a7bece444bce879f002e8d2257d29.webp
          怎么辦呢?能不能讓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索引模塊層級的錯誤。
          00b2421b8e74b5521177c704829c2b14.webp
          然后,在datas列表中,將Django項目的靜態(tài)文件目錄、媒體文件目錄、以及其他使用到的文件目錄全都以元組的形式添加進去。這會讓PyInstaller直接將這些文件打包到最后生成的文件夾中。

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

          等待一會兒,整個Django項目就打包好了,其完整的打包文件如下所示:

          9859cb87ab0ab9e1bbc81c8653fdd40a.webp
          三、效果
          打包好之后,我們打開命令行界面,輸入命令:
          mrdoc.exe runserver
          就啟動了Django Web網(wǎng)站,如下圖所示:

          6b0fe89da95544e1a009ed485f8c1614.webp
          在瀏覽器上訪問:127.0.0.1:8000?就可以看到我們的MrDoc覓道文檔了:

          4e4329b77cb0813c75961b4636809ecd.webp


          為了方便使用,我們還可以寫一個bat腳本,雙擊即可啟動它,免去打開命令行界面輸入命令的繁瑣:
          start ./mrdoc.exe runserver

          這樣,一個免安裝、一鍵啟動的Django網(wǎng)站應(yīng)用就打包制作完成了。
          點擊“閱讀原文”,可以獲取這個Windows免安裝便攜體驗版MrDoc下載地址詳細使用說明。
          瀏覽 36
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码爆操| 苏畅md一区二区三区在线观看 | 亚洲无码一区二区在线观看 | 4438全国最大无码视频 | 激情小黄片 |