把 Django 程序打包為 exe 可執(zhí)行文件

功能背景

我把自動化校準程序?qū)懞煤?,可以?Pycharm 中運行 Django 程序。但是,這個程序最終要給檢定員用的,我不可能在每個檢定員的電腦上安裝 Django 編程環(huán)境讓他們使用。所以,要把 Django 打包成 exe 文件,在檢定員們的電腦上直接運行exe 文件。

網(wǎng)上搜索了一番之后,最終考慮用 Pyinstaller 工具打包,但是 Pyinstaller 并不能直接給 Django 程序打包。而是要有一些特定的配置。

Django程序大體的打包步驟,看這2篇文章即可(2篇文章內(nèi)容基本一樣)。

https://blog.csdn.net/qq_34809033/article/details/81873896

https://www.itread01.com/content/1547953574.html

另外需要補充的是:

1. setuptools 模塊降級

按照以上2篇文章中的步驟,我在運行到 manage.exe runserver 這個步驟時,報的第一個錯誤是: No module named 'pkg_resources.py2_warn' Failed to execute script pyi_rth_pkgres 這個缺失的模塊,并不是需要在 hiddenimports 列表中增加的,而是模塊 setuptools 的問題。把 setuptools 模塊降低到 44.0.0 及以下版本,即可解決此問題。

pip install setuptools==44.0.0 # 安裝指定版本的模塊,同時會卸載掉舊的模塊

setuptools模塊降級的這一步驟,要在執(zhí)行所有的打包步驟之前進行。 如果在manage.exe runserver 執(zhí)行后發(fā)現(xiàn)這一錯誤,而此時已經(jīng)進行過打包步驟,則需要在把 setuptools 降級之后,刪除之前打包操作生成的所有文件,再重新執(zhí)行一遍打包步驟。

2. hiddenimports 列表的處理

執(zhí)行manage.exe runserver 報錯缺少模塊時,我當前的自動化程序,只報缺少 test_process.apps 這一個模塊。此時,hiddenimports=['test_process.apps'], 就可以了。

注意,報錯信息中模塊的名稱是什么,就把這個名稱的字符串,加到hiddenimports列表中。缺幾個模塊,就添加幾個模塊。

增加完 hiddenimports 后,不能直接運行 exe 文件,需要執(zhí)行 pyinstaller manage.spec 重新打包。

如果已經(jīng)進行過之前的打包步驟,生成了包文件,則必須刪除之前打包操作生成的所有文件,再重新執(zhí)行修改后的manage.spec文件, pyinstaller manage.spec,生成exe 文件后再執(zhí)行。

3. 創(chuàng)建一個 exe 可執(zhí)行文件,來運行 manage.exe runserver 命令

在虛擬環(huán)境的 cmd 中運行 manage.exe runserver 后,此時可以在 Chrome 中正常運行校準程序了。但是,總不能讓檢定員們創(chuàng)建一個虛擬程序,然后敲入manage.exe runserver命令吧。比較好的方案應(yīng)該是讓檢定員直接運行一個 exe。

我的思路是,再建立一個 .py 文件,在這 .py 文件中,執(zhí)行 manage.exe runserver 命令,實現(xiàn)打開服務(wù)器的功能。用 Pyinstaller 把這個 .py 文件打包成 autotest.exe ,把 autotest.exe 放到 manage.exe 同一個文件夾中。檢定員們實際使用到的就是這個 autotest.exe。點擊 autotest.exe 之后,即相當于運行服務(wù)器。

autotest.exe 文件:

import os
os.system('manage.exe runserver')
input()

此外,打包時,可能還需要考慮電腦操作系統(tǒng)的環(huán)境,是 64 位還是 32 位,win7 還是 win10,最好在同一配置的電腦上打包,然后給相同配置的電腦使用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容