Pyinstaller打包工具的使用以及避坑
作者:HashFlag 发布时间:2023-11-07 18:50:59
本篇博客主要介绍的是pyinstaller在windows下的基本使用和基础避坑
在windows中使用pyinstaller工具打包时会出现一个问题,在打包列表会看到这样的警告信息:
django.core.exceptions.ImproperlyConfigured: Could not find the GDAL library (tried "gdal302", "gdal301", "gdal300", "gdal204", "gdal203", "gdal202", "gdal201", "gdal20"). Is GDAL installed? If it is, try setting GDAL_LIBRARY_PATH in your settings.collect_submodules: failed to import 'django.contrib.gis.sitemaps'!
这种信息不予理会就好了。
一、基本使用
1、安装pyinstall
# pip install pyinstaller
2、查找程序需要的文件
# 制作 .spec 文件
# 进入项目目录,执行命令:(还有其它参数:-F等, 建议使用-D)
# -D会在当前目录下的dist目录中生成文件夹,处理静态文件时比较方便
# pyi-makespec -D manage.py
3、生成.exe文件
# 在manage.spec 同级目录执行
# pyinstaller manage.spec
4、进入dist目录运行项目
# 生成的exe可执行文件 runserver --noreload
# manage.exe runserver --noreload
二、基本错误处理
1、当运行exe后出现提示:No module named XXX
出现原因:出现这种情况的原因主要是由于Django有些module不会自动收集,需要手动添加
解决办法:打开生成的后缀名为.spec的文件,在hiddenimports中添加报错中没有的模块
2、当运行出现报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 658: illegal multibyte
出现原因:主要是windows系统下gbk编码的问题
解决办法:打开报错信息上面一行提示的错误文件并跳转到提示的错误行数上修改with open(),在里面添加:encoding='utf-8' 即可
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "threading.py", line 890, in _bootstrap
File "threading.py", line 936, in _bootstrap_inner
File "traceback.py", line 167, in format_exc
File "traceback.py", line 121, in format_exception
File "traceback.py", line 521, in __init__
File "traceback.py", line 533, in _load_lines
File "traceback.py", line 533, in _load_lines
File "traceback.py", line 533, in _load_lines
[Previous line repeated 2 more times]
File "traceback.py", line 531, in _load_lines
File "traceback.py", line 285, in line
File "linecache.py", line 16, in getline
File "linecache.py", line 47, in getlines
File "linecache.py", line 103, in updatecache
File "PyInstaller\loader\pyimod03_importers.py", line 299, in get_source
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 11211: illegal multibyte sequence
上面是报错示例,找到"PyInstaller\loader\pyimod03_importers.py"文件,打开并编译第299行找到对应位置添加:encoding='utf-8'(注:修改前先备份好备份,以免误操作找不回)
3、当运行出现这种报错:TemplateDoesNotExist at /index/
出现原因:TemplateDoesNotExist 这个是因为没有找到templates文件
解决办法:根据错误提示将templates文件添加至对应的路径下,刷新即可。
TemplateDoesNotExist at /index/
index/index.html
Request Method:GET
Request URL:http://127.0.0.1:8000/index/
Django Version:3.2.9
Exception Type:TemplateDoesNotExist
Exception Value:
index/index.html
Exception Location:django\template\loader.py, line 19, in get_template
Python Executable:F:\Workspoace\PyWork\bookstore\dist\manage.exe
Python Version:3.7.8
Python Path:
['C:\\Users\\ja\\AppData\\Local\\Temp\\_MEI25882\\base_library.zip',
'C:\\Users\\ja\\AppData\\Local\\Temp\\_MEI25882\\lib-dynload',
'C:\\Users\\ja\\AppData\\Local\\Temp\\_MEI25882']
Server time:Tue, 16 Nov 2021 03:13:35 +0000
Template-loader postmortem
Django tried loading these templates, in this order:Using engine django:
django.template.loaders.filesystem.Loader: C:\Users\ja\AppData\Local\Temp\_MEI25882\templates\index\index.html (Source does not exist)
django.template.loaders.app_directories.Loader: C:\Users\ja\AppData\Local\Temp\_MEI25882\django\contrib\admin\templates\index\index.html (Source does not exist)
django.template.loaders.app_directories.Loader: C:\Users\ja\AppData\Local\Temp\_MEI25882\django\contrib\auth\templates\index\index.html (Source does not exist)
上面这种示例把template文件夹复制下来放到C:\Users\ja\AppData\Local\Temp_MEI25882\下面即可
4、项目缺少样式css和js
出现原因:Pyinstaller 能找到templates(html files文件),但不能找到css和js文件
解决办法:
在settings中配置django静态文件收集
# STATIC_ROOT = os.path.join(BASE_DIR, '文件夹路径')
静态文件收集命令
# python manage.py collectstatic
然后在各个app的url中添加:
# static.static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
# 这句话的意思就是将STATIC_ROOT目录的静态文件复制一份到网页 STATIC_URL路径下
在.spec文件中修改datas,配置静态文件打包:
# F:\Workspoace\PyWork\bookstore\statics 要打包的css,js静态文件地址 相对应打包到dist中的位置
# F:\Workspoace\PyWork\bookstore\templates 要打包的html文件模板地址 相对应打包到dist中的位置
# datas=[(r'F:\Workspoace\PyWork\bookstore\statics',r'.\statics'), (r'F:\Workspoace\PyWork\bookstore\templates', r'.\templates')],
注:这里配置template打包上面的第3条文件迁移就不需要做了,这里同步打包了。
这里还存在一个小问题就是django的配置文件settings中:
# STATICFILES_DIRS = [
# os.path.join(BASE_DIR, "statics"),
# ]
STATIC_ROOT = os.path.join(BASE_DIR, 'statics')
STATICFILES_DIRS和STATIC_ROOT不能同时使用,如果配置了STATICFILES_DIRS需要注释掉,不然会报错。
来源:https://www.cnblogs.com/wylshkjj/p/15560983.html


猜你喜欢
- 经常遇到百度网盘的压缩文件加密了,今天我们就破解它!实现思路上篇文章给大家介绍了爆破密码的思路,感兴趣的朋友可以了解下。其实都大同小异:无非
- 我就废话不多说了,还是直接看代码吧!import matha=1;//边1b=1;//边2c=math.sqrt(2);//边3A=math
- 今天在安装SQL2005开发版时遇到了这样的一个问题:选择的功能中没有任何功能可以安装或升级,这是怎么回事呀?我已经选择了相应的组件,怎么还
- 生成6位随机验证码的3种实现方式如下:1. 简单粗暴型:所有数字和字母都放入字符串;2. 利用ascii编码的规律,遍历获取字符串和数字的字
- 本文介绍了数据库索引,及其优、缺点。针对MySQL索引的特点、应用进行了详细的描述。分析了如何避免MySQL无法使用,如何使用EXPLAIN
- 一段查看ASP文件源码的ASP程序,需要的朋友可以试试!<% SUB PrintLine (ByVal
- 系统中对Razor的支持包括两部分,其中之一就是自定义RazorViewEngine一、自定义RazorViewEngine在Global.
- 一.脚本基础 1.USE语句 &n
- golang判断元素是否在数组内众所周知,golang里没有像python的in来判断元素是否在list里存在,可替代的办法是将list放到
- 如何用php实现APP消息推送现在有很多的消息推送厂商,比如阿里云的消息推送,极光推送,融云的消息推送。他们的原理都是把sdk内置在app里
- 需求问题在日常工作中,对于前端发送过来的请求,后端django大部分都是采用json格式返回,也有采用模板返回视图的方式。在模板返回视图的方
- 物化表首先提出一个不相关的IN子查询SELECT * FROM s1 WHERE key1 IN (SELECT common_field
- Transformer模型概述Transformer是一种用于序列到序列学习的神经网络架构,专门用于处理输入和输出序列之间的依赖关系。该模型
- 当用户关闭cookie时,通过asp程序提示访客打开,源代码如下: Dim strCookie, strT
- 引言一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点:1、不开源,价格贵2、软件容量大。一般3G以上,
- 在脚本中可设置需要备份的数据库表清单,并且会将备份文件通过gzip压缩。需要注意的是,这段脚本仅适用数据一致性要求不高的环境。#!/bin/
- 今天中午看了一集动漫《进击的巨人》,看完后发现这些视频的名称有点乱,于是编程来批量重命名。重命名之前的各名称格式为——飞极速【www.fei
- 目录:分析和设计组件编码实现和算法用 Ant 构建组件测试 JavaScript 组件话说上期我们讨论了队列管理组件的设计,并且给它取了个响
- HTTP格式HTTP GET请求的格式:GET /path HTTP/1.1Header1: Value1Header2: Value2He
- 一.链接打开方式1、新窗口打开优点:用户点链接的时候,当前浏览的内容不会被替换,不需要通过前进、后退去看自己看过的内容;缺点:访问一会,就会