参考

官网: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(...)

有四个类实例:

  1. Analysis实例a:该项配置脚本名称,解析导入和依赖包
  2. PYZ
  3. EXE
  4. 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两个文件夹。

生成

  1. dist文件夹(包含生成好的.exe)
  2. build文件夹(中间生成,没用,事后可以删掉)
  3. 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打包的更多相关文章

  1. python3使用pyinstaller打包apscheduler出的错

    本来只是想用Python做一个定时任务小工具在服务器上运行,可是服务器在隔离区,各种禁止上外网,使用pip导出列表那种下载库的方法不管用,导致Python的各种库都下不到,官网离线下载又各种缺依赖,好 ...

  2. PyInstaller打包步骤简记

    pyinstaller 下载地址:http://www.pyinstaller.org/ 下载后用cmd进入解压文件夹 python setup.py install 安装. 最近用pyinstall ...

  3. pyinstaller打包第一个wxPython程序HelloWorld

    pyinstaller 打包hello 7Mb ================= www.pyinstaller.org pip install pypiwin32 pip install pyin ...

  4. [python学习笔记] pyinstaller打包pyqt5程序无法运行

    问题 pyinstaller打包的pyqt5程序在部分电脑上会失败.用户截图提示下边错误日志 无法定位程序输入点 ucrtbase.terminate 于动态链接库 api-ms-win-crt-ru ...

  5. pyinstaller 打包生成exe之后运行提示‘no module name 'xxx'’错误

    python 3.7 pyinstaller 3.4 具体情况: pycharm中点击运行可成功执行,生成正确结果,没有报错. 双击run.py(程序运行的主文件),运行,可生成正确结果,没有报错. ...

  6. Pyinstaller打包django

    偶有特殊要求可能需要将django程序打包成exe可执行文件,方便在电脑直接点击运行.这里用的是打包python代码的常用库Pyinstaller. 虽然用Pyinstaller支持打包Django, ...

  7. PyInstaller 打包 python程序成exe

    pychaim下PyInstaller 打包 python程序 主题是使用PyInstaller 打包python时遇到一些问题以及解决方案,其中将要打包的程序是用tensorflow做的LSTM算法 ...

  8. pyinstaller 打包exe可执行文件

    Python打包EXE方法之一 一.安装Pyinstaller 1.安装pywin32 下载安装文件:查找到跟自己适用的python版本及window系统版本匹配的pywin32,下载后安装 使用pi ...

  9. (转!)Pyinstaller 打包发布经验总结

    原文地址 https://blog.csdn.net/weixin_42052836/article/details/82315118 具体的实现图待本人实现后贴上 原 Pyinstaller 打包发 ...

  10. Pyinstaller打包selenium去除chromedriver黑框问题解决!!!

    Pyinstaller打包selenium去除chromedriver黑框问题解决!!!     问题描述 [1123/101706.932:ERROR:gpu_process_transport_f ...

随机推荐

  1. Springboot CORS跨域访问

    Springboot CORS跨域访问 什么是跨域 浏览器的同源策略限制: 它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础 ...

  2. 完整说明使用SpringBoot+js实现滑动图片验证

    常见的网站验证方式有手机短信验证,图片字符验证,滑块验证,滑块图片验证.本文主要讲解的是滑块图片验证的实现流程.包括后台和前端的实现. 实现效果 使用的API java.awt.image.Buffe ...

  3. 在Windows Python3.4 上安装NumPy、Matplotlib、SciPy和IPython

    NumPy 下载地址: http://sourceforge.net/projects/numpy/files/NumPy/1.8.1/ SciPy 下载地址: http://sourceforge. ...

  4. 为什么要在离线A/B测试中使用贝叶斯方法

    当涉及到假设检验时,贝叶斯方法可以取代经典的统计方法.这里将使用web分析的具体案例来演示我们的演示. 贝叶斯方法在经典统计中的重要性在此链接. https://towardsdatascience. ...

  5. 十分钟一起学会ResNet残差网络

    作者 | 荔枝boy 目录 深层次网络训练瓶颈:梯度消失,网络退化 ResNet简介 ResNet解决深度网络瓶颈的魔力 ResNet使用的小技巧 总结 深层次网络训练瓶颈:梯度消失,网络退化 深度卷 ...

  6. HDU - 1962 二分图最大匹配模板(扑克牌得分最大)

    题意: 直接说数据,第一行给定几组数据,每一组数据的第一行是两个人扑克牌分别的数量,第一行是亚当的扑克牌,第二行是夏娃的扑克牌,每一个扑克牌的大小用两个字符来表示,第一个表示是几号扑克牌,第二个表示扑 ...

  7. Linux/CentOS7搭建Anaconda运行环境

    1. 安装miniconda 下载并安装miniconda到$HOME/.miniconda/ #从官网下载 wget -c "https://repo.anaconda.com/minic ...

  8. CSS基础总结 1

    一.什么是 CSS? CSS 指层叠样式表 (Cascading Style Sheets),是一种用来表现 HTML 文档样式的语言,样式定义如何显示 HTML 元素,是能够真正做到网页表现与结构分 ...

  9. 关于 JavaScript 的 精度丢失 与 近似舍入

    一.背景 最近做 dashborad 图表时,涉及计算小数且四舍五入精确到 N 位.后发现 js 算出来的结果跟我预想的不一样,看来这里面并不简单-- 二.JS 与 精度 1.精度处理 首先明确两点: ...

  10. [HDU]1166敌兵布阵<静态线段树>

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 题目大意:给出n个点,每个点有一个值,现在有三种操作, 1.在i点加上j 2.在i点减去j 3. ...