功能背景
我把自動化校準程序?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,最好在同一配置的電腦上打包,然后給相同配置的電腦使用。