功能背景
我把自動化校準程序寫好后璃谨,可以在 Pycharm 中運行 Django 程序驳规。但是,這個程序最終要給檢定員用的,我不可能在每個檢定員的電腦上安裝 Django 編程環(huán)境讓他們使用立哑。所以,要把 Django 打包成 exe 文件水醋,在檢定員們的電腦上直接運行exe 文件管削。
網上搜索了一番之后,最終考慮用 Pyinstaller 工具打包罗心,但是 Pyinstaller 并不能直接給 Django 程序打包里伯。而是要有一些特定的配置。
Django程序大體的打包步驟渤闷,看這2篇文章即可(2篇文章內容基本一樣)疾瓮。
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)這一錯誤脑漫,而此時已經進行過打包步驟髓抑,則需要在把 setuptools 降級之后,刪除之前打包操作生成的所有文件窿撬,再重新執(zhí)行一遍打包步驟启昧。
2. hiddenimports 列表的處理
執(zhí)行manage.exe runserver
報錯缺少模塊時,我當前的自動化程序劈伴,只報缺少 test_process.apps 這一個模塊密末。此時握爷,hiddenimports=['test_process.apps'], 就可以了。
注意严里,報錯信息中模塊的名稱是什么新啼,就把這個名稱的字符串,加到hiddenimports列表中刹碾。缺幾個模塊燥撞,就添加幾個模塊。
增加完 hiddenimports 后迷帜,不能直接運行 exe 文件物舒,需要執(zhí)行 pyinstaller manage.spec 重新打包。
如果已經進行過之前的打包步驟戏锹,生成了包文件冠胯,則必須刪除之前打包操作生成的所有文件,再重新執(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命令吧。比較好的方案應該是讓檢定員直接運行一個 exe宏粤。
我的思路是京髓,再建立一個 .py 文件,在這 .py 文件中商架,執(zhí)行 manage.exe runserver 命令,實現(xiàn)打開服務器的功能芥玉。用 Pyinstaller 把這個 .py 文件打包成 autotest.exe 蛇摸,把 autotest.exe 放到 manage.exe 同一個文件夾中。檢定員們實際使用到的就是這個 autotest.exe灿巧。點擊 autotest.exe 之后赶袄,即相當于運行服務器。
autotest.exe 文件:
import os
os.system('manage.exe runserver')
input()
此外抠藕,打包時饿肺,可能還需要考慮電腦操作系統(tǒng)的環(huán)境,是 64 位還是 32 位盾似,win7 還是 win10敬辣,最好在同一配置的電腦上打包,然后給相同配置的電腦使用。