pyinstaller打包
参考
官网:http://www.pyinstaller.org/
pyinstaller参数使用
使用spec文件
安装
Windows依赖pypiwin32,新版的pyinstaller已经包含了该模块,不用单独安装。
pipenv install pyinstaller
运行
pyinstaller [options] xxx.py
完整的命令行:
pyinstaller [options] script [script …] | specfile
最简单的调用方式
pyinstaller myscript.py
常用参数
-F 指定打包后只生成一个exe格式的文件
-D –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)
-c –console, –nowindowed 显示控制台界面(默认)
-w –windowed, –noconsole 使用窗口,无控制台
-p 添加搜索路径,让其找到对应的库
-i 改变生成程序的icon图标
更详细的使用方法可以参考下载包里的doc目录下的Manual.html文件。
注意事项:
生成文件中,可能包含一个以warn开头的类似warndemo.txt的警告文件,是因为程序无法自动导入很多的库,使用-p参数添加搜索路径。
使用spec文件添加打包资源
如果不想每次都传入参数,可以使用配置文件spec。
首先创建spec文件:
pyi-makespec name.py
或者将参数传进去
pyi-makespec options name.py [other scripts …]
从命令行传入的options和后面添加到spec文件是一样的效果。这里传入的option会自动填入spec文件对应的位置,也可以不传入options直接填写spec文件。
使用spec文件后,运行时不要指定py而直接指定spec文件:不能运行.py否则会讲sepc更改的内容清除掉
pyinstaller myscript.spec
注意:以上如果指定了options会被忽略并使用spec中的值。如,使用了spec之前又指定了-c,spec会一直保留配置
exe = EXE(pyz,
...
console=True,
...
后面再使用spec指定命令行的-c就没有用了,则要修改spec中的console=True来显示控制台。
从spec文件创建时,只有以下命令行参数有效:
--upx-dir=
--distpath=
--workpath=
--noconfirm
--ascii
--clean
spec文件详解
block_cipher = None
a = Analysis(['minimal.py'],
pathex=['/Developer/PItests/minimal'],
binaries=None,
datas=None,
hiddenimports=[],
hookspath=None,
runtime_hooks=None,
excludes=None,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,... )
coll = COLLECT(...)
有四个类实例:
- Analysis实例a:该项配置脚本名称,解析导入和依赖包
- PYZ
- EXE
- COLLECT
修改 spec文件将参数写到Analysis和EXE.
添加datas,-h帮助描述如下
[--add-data <SRC;DEST or SRC:DEST>]
windows上要使用分号,linux上要使用冒号。
是否使用分号或冒号分隔符取决于os.pathsep.
windows下,打开cmd,输入
import os
os.pathsep
输出的是分号';'。
注意:如果在Windows上使用了冒号,会报错:
argument --add-data: invalid add_data_or_binary value
使用add-data参数时会加入到spec文件的datas中(也可以直接写到spec中),如
--add-data="assets/bg.jpg;assets"
spec
datas=[('assets/bg.png', 'assets')],
修改exe图标
pyinstaller -F -i some.ico demo.py
需要注意:需要移动下生成可执行程序的位置,才可以显示图片。
-i 添加到了spec的exe实例中的icon参数
注意加的位置在exe中
exe = EXE(pyz,
a.scripts,
[],
exclude_binaries=True,
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True , icon='favicon.ico')
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='main')
打包flask web
将static和template的路径包含进去,这里要试用相对路径,且在Windows下打包要试用双反斜杠\
datas=[('.//static','static'),('.//templates','templates')],
配置好spec的datas参数,运行pyinstaller name.spec后会在dist文件下生成static和template两个文件夹。
生成
- dist文件夹(包含生成好的.exe)
- build文件夹(中间生成,没用,事后可以删掉)
- spec文件(要转换文件的同一目录下,用于生成exe文件,可以修改来自定义生成exe的属性)
不压缩生成的exe文件
不压缩打包的时候记得把所有的静态文件复制过去,包括icon和background。
遇到的问题
注意:到步骤
Looking for dynamic libraries
的时候超级慢,等了大概20分钟才继续下面的步骤。未找到加快的解决方法。
运行打包好后的exe报错:
failed to execute script
重新打包,去掉-w
参数,看console输入的错误后,调试。
__main__.b is not a package
python: __main__.b is not a package
这个x是模块名称,查看使用了相对导入,如from .a import b
.找到了一个相对清楚的解释.
修改为from c.a import b
, c为a的包名,再重新生成后OK。
图片资源没打包进去
试了下,代码中写的image必须使用绝对路径打包完才能显示出来。
使用官方小实例
下载Windows版本,解压后在根目录下的examples有很多官方的小实例
pyinstaller打包的更多相关文章
- python3使用pyinstaller打包apscheduler出的错
本来只是想用Python做一个定时任务小工具在服务器上运行,可是服务器在隔离区,各种禁止上外网,使用pip导出列表那种下载库的方法不管用,导致Python的各种库都下不到,官网离线下载又各种缺依赖,好 ...
- PyInstaller打包步骤简记
pyinstaller 下载地址:http://www.pyinstaller.org/ 下载后用cmd进入解压文件夹 python setup.py install 安装. 最近用pyinstall ...
- pyinstaller打包第一个wxPython程序HelloWorld
pyinstaller 打包hello 7Mb ================= www.pyinstaller.org pip install pypiwin32 pip install pyin ...
- [python学习笔记] pyinstaller打包pyqt5程序无法运行
问题 pyinstaller打包的pyqt5程序在部分电脑上会失败.用户截图提示下边错误日志 无法定位程序输入点 ucrtbase.terminate 于动态链接库 api-ms-win-crt-ru ...
- pyinstaller 打包生成exe之后运行提示‘no module name 'xxx'’错误
python 3.7 pyinstaller 3.4 具体情况: pycharm中点击运行可成功执行,生成正确结果,没有报错. 双击run.py(程序运行的主文件),运行,可生成正确结果,没有报错. ...
- Pyinstaller打包django
偶有特殊要求可能需要将django程序打包成exe可执行文件,方便在电脑直接点击运行.这里用的是打包python代码的常用库Pyinstaller. 虽然用Pyinstaller支持打包Django, ...
- PyInstaller 打包 python程序成exe
pychaim下PyInstaller 打包 python程序 主题是使用PyInstaller 打包python时遇到一些问题以及解决方案,其中将要打包的程序是用tensorflow做的LSTM算法 ...
- pyinstaller 打包exe可执行文件
Python打包EXE方法之一 一.安装Pyinstaller 1.安装pywin32 下载安装文件:查找到跟自己适用的python版本及window系统版本匹配的pywin32,下载后安装 使用pi ...
- (转!)Pyinstaller 打包发布经验总结
原文地址 https://blog.csdn.net/weixin_42052836/article/details/82315118 具体的实现图待本人实现后贴上 原 Pyinstaller 打包发 ...
- Pyinstaller打包selenium去除chromedriver黑框问题解决!!!
Pyinstaller打包selenium去除chromedriver黑框问题解决!!! 问题描述 [1123/101706.932:ERROR:gpu_process_transport_f ...
随机推荐
- logstash设置从文件读取的重要参数说明及如何强置重新读取
问题描述: 如果运行logstash时从文件读取数据时,就会遇到一个问题,如果读取的目标文件未经修改,而仅修改了conf文件,则即使重新运行logstash,或是执行时使用-r时输出也无法更新. 解决 ...
- 利用 MinIO 轻松搭建静态资源服务
目录 1 引言 2 MinIO 简介 3 MinIO 运行与静态资源使用 3.1 MinIO 获取 3.2 MinIO 启动与运行 3.2.1 前台简单启动 3.2.2 后台指定参数运行 3.2.3 ...
- 02.Go语言开发环境搭建(新版)
安装Go语言及搭建Go语言开发环境 注意:Go语言1.14版本之后推荐使用go modules管理以来,也不再需要把代码写在GOPATH目录下了 下载 下载地址 Go官网下载地址:https://go ...
- 《闲扯Redis三》Redis五种数据类型之List型
一.前言 Redis 提供了5种数据类型:String(字符串).Hash(哈希).List(列表).Set(集合).Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要. ...
- python使用镜像源安装库
pip install django -i http://pypi.douban.com/simple --trusted-host pypi.douban.com 豆瓣 :http://pypi.d ...
- 移动端rem布局实现(vw)
什么是rem?在W3C官网上是这样描述的:“font size of the root element (根元素的字体大小)”.就是说rem是相当于html的,因为网页的默认字体大小是 16px,所以 ...
- JavaScipt创建函数的方法
JavaScipt的函数的定义有三种方式: 一.命名函数定义 1.JavaScript 函数通过 function 关键词进行定义,其后是函数名和括号 (). 2.函数名可包含字母.数字.下划线和美 ...
- 使用onclick/表单submit跳转到其他页面
使用onclick 如果是本页显示可以直接用location,方法如下: - onclick="javascript:window.location.href='URL'" - o ...
- SSM 三大框架系列:Spring 5 + Spring MVC 5 + MyBatis 3.5 整合(附源码)
之前整理了一下新版本的 SSM 三大框架,这篇文章是关于它的整合过程和项目源码,版本号分别为:Spring 5.2.2.RELEASE.SpringMVC 5.2.2.RELEASE.MyBatis ...
- 让我来教你如何免费使用RHEL小红帽系统
RHEL安装注册过程中遇到的问题 从开始注册到正常使用 如何获取正版RHEL 注意事项 VMware虚拟机下载安装 安装中出现的问题 从开始注册到正常使用 答主是个动手能力比较强的人 ,所以当老师讲到 ...