功能背景
我把自动化校准程序写好后,可以在 Pycharm 中运行 Django 程序。但是,这个程序最终要给检定员用的,我不可能在每个检定员的电脑上安装 Django 编程环境让他们使用。所以,要把 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
模块降级的这一步骤,要在执行所有的打包步骤之前进行。 如果在manage.exe runserver
执行后发现这一错误,而此时已经进行过打包步骤,则需要在把 setuptools 降级之后,删除之前打包操作生成的所有文件,再重新执行一遍打包步骤。
2. hiddenimports 列表的处理
执行manage.exe runserver
报错缺少模块时,我当前的自动化程序,只报缺少 test_process.apps 这一个模块。此时,hiddenimports=['test_process.apps'], 就可以了。
注意,报错信息中模块的名称是什么,就把这个名称的字符串,加到hiddenimports列表中。缺几个模块,就添加几个模块。
增加完 hiddenimports 后,不能直接运行 exe 文件,需要执行 pyinstaller manage.spec 重新打包。
如果已经进行过之前的打包步骤,生成了包文件,则必须删除之前打包操作生成的所有文件,再重新执行修改后的manage.spec文件, pyinstaller manage.spec,生成exe 文件后再执行。
3. 创建一个 exe 可执行文件,来运行 manage.exe runserver
命令
在虚拟环境的 cmd 中运行 manage.exe runserver 后,此时可以在 Chrome 中正常运行校准程序了。但是,总不能让检定员们创建一个虚拟程序,然后敲入manage.exe runserver命令吧。比较好的方案应该是让检定员直接运行一个 exe。
我的思路是,再建立一个 .py 文件,在这 .py 文件中,执行 manage.exe runserver 命令,实现打开服务器的功能。用 Pyinstaller 把这个 .py 文件打包成 autotest.exe ,把 autotest.exe 放到 manage.exe 同一个文件夹中。检定员们实际使用到的就是这个 autotest.exe。点击 autotest.exe 之后,即相当于运行服务器。
autotest.exe 文件:
import os
os.system('manage.exe runserver')
input()
此外,打包时,可能还需要考虑电脑操作系统的环境,是 64 位还是 32 位,win7 还是 win10,最好在同一配置的电脑上打包,然后给相同配置的电脑使用。