Django项目使用pyinstall打包步骤(包含各种出错处理方法)

2023年6月27日11:07:38

由于需要虚拟环境中各种依赖的库,在其他电脑开启本地服务,所以将Django项目进行打包,以下是各种步骤以及出错的处理

  • 安装pyinstall
    我在使用pip安装pyinstall的时候,会出现大量的红字错误,只需要按照下面的指令一个个执行就好了
pip install pywin32;
pip install wheel
pip install -U setuptools
pip install pyinstaller
  • 开始打包

执行下面两条指令,其中执行第一条后会生成一个spec文件,先不用管,等会会进行修改。第二条就是开始使用pyinstaller打包的指令

pyi-makespec -D manage.py
pyinstaller manage.spec

在执行过程中,可能会出现Import Error,注意是可能在打包而不是执行的时候出现,网上大多都是说执行exe时会出现。而这里出现,他并没有说明缺的是哪个包,这个时候就要将控制台往上翻,就会翻到类似这个的错误

Import Error:No module named XXX

然后我显示缺失的包名是我Django项目中的其中一个App名,而我将app都放在了apps文件夹中,并在settings文件夹中设置了目录,导致pyinstall找不到。

解决办法就是将app都移到主目录上,settings注释掉设置目录的代码即可,操作并不复杂,之后再次执行上面那两句打包指令

pyi-makespec -D manage.py
pyinstaller manage.spec

这次我就正常生成了exe文件在dict目录下,执行下面指令开启服务器

manage.exe runserver

然后又是一堆Import Error,后面会跟着缺失的包名,这个就很好解决了,打开上面提到的manage.spec文件,按照下面这个图这样加入缺失的包名。具体是为什么,简单来说是因为这些是django项目中隐式加入的,所以我们需要手动加进去。
然后就是删掉build和dict文件夹并重新打包,重新开启服务器,有时候会提示缺失多个包,有时候会只提示一个,反正重复执行到不出现Import Error为止
Django项目使用pyinstall打包步骤(包含各种出错处理方法)

pyi-makespec -D manage.py
pyinstaller manage.spec
cd dict
manage.exe runserver

我在处理完上述问题后,又出现了新的问题,主要是这两条

KeyError:'interval' LookupError: No trigger by the name "interval" was found
SchedulerNotRunningError:Scheduler is not running

出现错误的地方是Django项目中有使用调度器scheduler,具体错误原因不明,但是网上有很多解决办法,其中有效的是创建一个IntervalTrigger对象代替参数

trigger = IntervalTrigger(hours=3)
@register_job(scheduler,trigger)
    def my_job():
    	#省略

同样适用于add_job

上面的问题处理完后,就可以正常开启本地服务器了,但是却访问不了页面,因为模板等都没有复制过去,如果有第三方库也用到html、css、js文件等,可以直接将第三方库地文件夹复制到exe同级目录,这样就不会出错了。

  • 作者:彼岸丶初凉
  • 原文链接:https://blog.csdn.net/qq_35342292/article/details/105839916
    更新时间:2023年6月27日11:07:38 ,共 1376 字。