Pyinstaller打包工具的使用以及避坑

目录
  • 一、基本使用
  • 二、基本错误处理
    • 1、当运行exe后出现提示:No module named XXX
    • 2、当运行出现报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 658: illegal multibyte
    • 3、当运行出现这种报错:TemplateDoesNotExist at /index/
    • 4、项目缺少样式css和js

本篇博客主要介绍的是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需要注释掉,不然会报错。

到此这篇关于Pyinstaller打包工具的使用以及避坑的文章就介绍到这了,更多相关Pyinstaller打包工具内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法

    windows系统下安装Pyinstaller cmd下输入指令 pip install PyInstaller Pyinstaller的使用 进入需要打包的目录下,执行打包命令 Pyinstaller [opts] yourprogram.py 示范 pyinstaller -F -W helloworld.py opts可选的参数 参数 含义 -F -onefile,打包成一个exe文件 -D -onefile,创建一个目录,包含exe文件,但会依赖很多文件(默认选项) -c -consol

  • Python程序打包工具py2exe和PyInstaller详解

    前言 通常执行 python 程序要有相应的 Python 环境,但某些特定场景下,我们可能并不愿意这么麻烦的去配置这些环境(比如将写好的脚本发给客户进行操作),如果可以提前将程序打包成 Windows平台的 .exe 文件或者是Linux下的 .sh 脚本,那么使用起来就会方便很多,py2exe 和 PyInstaller 这两款工具都是干这么个事的,下面以 hello.py 脚本(代码内容如下)为例进行介绍. age = input("How old are you?\n") pr

  • Pyinstaller打包工具的使用以及避坑

    目录 一.基本使用 二.基本错误处理 1.当运行exe后出现提示:No module named XXX 2.当运行出现报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 658: illegal multibyte 3.当运行出现这种报错:TemplateDoesNotExist at /index/ 4.项目缺少样式css和js 本篇博客主要介绍的是pyinstaller在windows下的基本使用和基础

  • pyinstaller打包程序exe踩过的坑

    基础环境 python 2.7.17 pyinstaller 3.5 安装pyinstaller pip install pyinstaller 坑,大坑,深坑 背景:用pygame写了个贪吃蛇游戏,要打包成exe 用到了字体文件 C:\Windows\Fonts\simsun.ttc (宋体) 打包过程中没有报错 打包过程中的警告可以忽略,这个警告: WARNING: Hidden import "pygame._view" not found! 运行exe的时候报NotImplem

  • pyinstaller打包exe程序的步骤和添加依赖文件的实现

    目录 pyinstaller打包exe程序和添加依赖文件 1.安装pyinstaller库 2.pyinstaller的打包机制 3.打包命令 4.添加导包外的一些依赖文件 5..spec方式打包 6.pyinstaller常用参数 pyinstall打包时的依赖问题 pyinstaller打包exe程序和添加依赖文件 或许我们并不是专业的程序猿,但是却可以通过python来提高我们的工作效率,减少加班时间,让代码替我们完成一些重复的工作,节省下来的时间去泡个妹子,牵牵小手不香吗 话不多说,马上

  • 关于Pyinstaller打包eel和pygame需要注意的坑

    这几天我们团队用python做了一个游戏,引擎用的pygame,UI界面用的eel(一个python库,用于利用HTML开发桌面应用程序,主要是因为QT机制太过复杂,而博主Deadpool不愿做费力不讨好的事,import一个eel,便可通过HTML.CSS.JS开发桌面应用程序,这简直不要太爽,另外,关于eel的使用也许我会在后续文章中写到) 1.打开cmd / Visual Studio等等可以装包的工具下载pyinstaller 如果是python环境,那么:pip install pyi

  • 基于Pyinstaller打包Python程序并压缩文件大小

    这段时间应老师的要求,给实验室写了一个基于 PyQt5 的小工具.然而源码发过去人家还不要,一定要打包成可执行软件. 那就打包呗,刚好以前对 Pyinstaller 有一点接触,就用了一下这玩意.这篇博文主要记录一下基本用法和踩得一些坑. 1. 用 Pyinstaller 打包 Python 程序 首先我们需要安装 Pyinstaller: pip install pyinstaller 用 conda 也行,不过貌似最近清华的 Anaconda 源被封了,也不知道什么时候解禁. Pyinsta

  • 解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题

    解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题 最近写一个小脚本,源代码200多行,引入了 openpyxl.requests库,写完打包exe之后居然有64MB的大小,真是奇了葩了.网上查找各位大神的做法,自己又动手填了N个坑之后,总算找到缩小exe文件的方法了,这种方法必须使用到pipenv,详细记录如下: 1.安装pipenv 就像安装其他python库一样,在cmd环境下安装: pip install pipenv 2.安装完成后,随便找一个盘符,在这个

  • Pyinstaller打包文件太大的解决方案

    废话不多说 原因: 在Anaconda下打包的很多不必要的模块进去,导致最终的exe文件过于庞大. 解决办法: 要用纯净的python来打包即可避免加入不必要的包,那么如何快速地建立纯净的python环境呢? 当然不用重装python,只需要通过pipenv建立虚拟环境即可.在虚拟环境下打包,最终的exe文件会非常小(几M). #第一步,建立虚拟环境 pipenv install #第二步,进入虚拟环境 pipenv shell #第三步,安装自己最终打包的py文件下需要的模块即可 pip in

  • 基于打包工具Webpack进行项目开发实例

    一. 常见打包工具的介绍 在打包工具中,常见的有RequireJS,browserify,webpack,其中RequireJS是一个JavaScript模块加载器,基予ADM(async module define)规范实现,browserify是一个以在浏览器中使用Node.js模块为出发点的工具,而webpack则是一个为前端模块打包构建而生的工具. 二. 工具的使用 (1)作为npm包的RequireJS提供了一个可执行的r.js工具,通过命令行执行,使用方式如下: npm instal

  • 解决pyinstaller打包exe文件出现命令窗口一闪而过的问题

    用pyinstaller打包的exe文件打开时,命令窗口一闪而过,并且未出现GUI界面,也看不到错误信息,然后去网上搜相关的信息,最多的两种说法: 1.添加raw_input()或者os.system("pause")等待信息 ,但是添加后依然是命令窗口一闪而过 2.在命令窗口打开exe,网上有两种打开exe的方法 start Path\Project.exe start加exe文件的绝对路径,但是效果和双击exe文件一样,依然是一闪而过 cd path >>Project

随机推荐