记录pyinstaller打包django项目遇到的坑
由于工作需要,需要在内网部署一个Django项目生成exe,打包过程遇到了不少坑,在此记录一下。
一、安装pyinstaller
略。
二、打包exe
第一个问题:用pyinstaller -F -w生成的exe报错
一开始用的是以下命令生成exe:
pyinstaller -F -w xx.py
导出完毕后,在dist/manage/目录下输入
manage.exe runserver
尝试运行,报错:
RuntimeError: Script runserver does not exist. [9392] Failed to execute script 'manage' due to unhandled exception!
解决方式是在后面追加--noreload,即
manage.exe runserver --noreload
该问题解决
第二个问题:服务启动时又报另一个错:
No module named XXX
这是因为pyinstaller打包时不会将所有的模块一并打包,会有遗漏。解决方式有两种,一种是在生成exe的时候在后面追加--hidden_import,这种方法有点麻烦,所以我用了第二种方法,先生成spec文件:
pyi-makespec -D xx.py
运行后在项目目录下出现xx.spec文件,然后在xx.spec里面修改hidden_import字段:
hiddenimports=["generate.apps", "openpyxl.cell._writer"]
修改后用下面的命令生成exe:
pyinstaller manage.spec
该问题解决
第三个问题:打开网页就会报TemplateDoesNotExist,找不到页面
解决方式是把templates和static这两个存html和css的目录拷贝到报错的位置,问题解决。