Pyinstaller 0
Pyinstaller 是一个小的可以打包我们所写的Python脚本,来生成相应的可执行文件。
它是怎么工作的?
PyInstaller读取您编写的Python脚本。它会分析您的代码,以发现您的脚本执行所需的每个其他模块和库。然后它收集所有这些文件的副本 - 包括活动的Python解释器! - 并将它们与您的脚本放在一个文件夹中,或者可选地放在一个可执行文件中。----来自官方文档。
对于绝大多数程序,这可以通过一个简短的命令来完成,
pyinstaller myscript.py
您将捆绑包作为文件夹或文件分发给其他人,他们可以执行您的程序。对于您的用户,该应用程序是自包含的。他们不需要安装任何特定版本的Python或任何模块。他们根本不需要安装Python。
分析:查找程序需要的文件
您的脚本需要什么其他模块和库才能运行?(这些有时被称为“依赖”。)
为了找到答案,PyInstaller会import
在您的脚本中找到所有语句。它找到导入的模块并在其中查找import
语句,依此类推,直到它具有脚本可能使用的完整模块列表。
PyInstaller了解通常用于Python包的“egg”分发格式。如果您的脚本从“egg”导入模块,PyInstaller会将egg及其依赖项添加到所需的文件集中。
PyInstaller还了解许多主要的Python包,包括GUI包 Qt(通过PyQt或PySide导入),WxPython,TkInter,Django和其他主要包。有关完整列表,请参阅支持的包。
一些Python脚本以PyInstaller无法检测的方式导入模块:例如,通过将__import__()
函数与变量数据一起使用imp.find_module()
,sys.path
在运行时使用或操作该值。如果您的脚本需要PyInstaller不知道的文件,您必须帮助它:
- 您可以在
pyinstaller
命令行上提供其他文件。 - 您可以在命令行上提供其他导入路径。
- 您可以编辑PyInstaller在您第一次为脚本运行时写入的文件。在spec文件中,您可以告诉PyInstaller有关脚本特有的代码模块。
myscript.spec
- 您可以编写“钩子”文件,通知PyInstaller隐藏的导入。如果为其他用户也可能使用的包创建“挂钩”,则可以将挂钩文件提供给PyInstaller。
如果您的程序依赖于对某些数据文件的访问,您也可以告诉PyInstaller将它们包含在捆绑包中。您可以通过修改spec文件来执行此操作,该文件是使用规范文件中介绍的高级主题。
为了在运行时查找包含的文件,您的程序需要能够以一种无论是否从捆绑包运行的方式在运行时学习其路径。这包含在运行时信息中。
PyInstaller并没有包括应该在这个操作系统的任何安装存在库。例如,在Linux中,它不捆绑任何文件,/lib
或者/usr/lib
假设这些文件可以在每个系统中找到。
捆绑到一个文件夹
将PyInstaller应用于myscript.py
默认结果时,将命名为单个文件夹myscript
。此文件夹包含所有脚本的依赖项,以及一个也命名的可执行文件myscript
(myscript.exe
在Windows中)。
您压缩文件夹myscript.zip
并将其传输给您的用户。他们只需解压缩即可安装程序。用户通过打开文件夹并在其中启动myscript
可执行文件来运行您的应用程序。
在使用单文件夹模式时,可以轻松调试在构建应用程序时出现的问题。您可以准确地看到PyInstaller收集到文件夹中的文件。
单文件夹包的另一个优点是,当您更改代码时,只要它导入完全相同的依赖项集,您就只能发送更新的myscript
可执行文件。这通常比整个文件夹小得多。(如果更改脚本以便导入更多或不同的依赖项,或者如果依赖项已升级,则必须重新分发整个bundle。)
单文件夹格式的一个小缺点是一个文件夹包含大量文件。您的用户必须myscript
在一长串名称或大量图标中找到可执行文件。此外,您的用户可能会意外地将文件拖出文件夹,从而产生问题。
单文件夹程序如何工作
捆绑的程序总是在PyInstaller引导加载程序中开始执行。这是myscript
文件夹中可执行文件的核心。
该PyInstaller引导程序是为活动平台(Windows,Linux和Mac OS X的,等等)的二进制可执行程序。当用户启动程序时,它就是运行的引导加载程序。引导加载程序创建一个临时的Python环境,以便Python解释器可以在myscript
文件夹中找到所有导入的模块和库。
引导加载程序启动Python解释器的副本以执行您的脚本。如果包含所有必要的支持文件,那么通常都会从那里开始。
捆绑到一个文件
PyInstaller可以将您的脚本及其所有依赖项捆绑到一个名为myscript
(myscript.exe
在Windows中)的可执行文件中。
优点是您的用户可以获得他们理解的内容,即可以启动的单个可执行文件。缺点是任何相关文件(如README)必须单独分发。此外,单个可执行文件的启动速度比单文件夹捆绑包慢一点。
在尝试捆绑到一个文件之前,请确保捆绑到一个文件夹时应用程序正常工作。这是很多更容易地诊断在一个文件夹模式的问题。
单文件程序如何工作
引导加载程序也是单文件包的核心。启动时,它会在此操作系统的相应临时文件夹位置创建一个临时文件夹。该文件夹已命名,其中xxxxxx是随机数。_MEIxxxxxx
一个可执行文件包含脚本使用的所有Python模块的嵌入式存档,以及任何非Python支持文件(例如.so
文件)的压缩副本。引导加载程序解压缩支持文件并将副本写入临时文件夹。这可能需要一点时间。这就是为什么单文件应用程序比单文件夹应用程序启动慢一点的原因。
创建临时文件夹后,引导加载程序与临时文件夹的上下文中的单文件夹包完全相同。当捆绑代码终止时,引导加载程序将删除临时文件夹。
(在Linux和相关系统中,可以/tmp
使用“无执行”选项挂载该文件夹。该选项与PyInstaller 单文件包不兼容。它需要执行代码/tmp
。)
由于程序会创建一个具有唯一名称的临时文件夹,因此您可以运行该应用程序的多个副本; 他们不会互相干涉。但是,在磁盘空间中运行多个副本是很昂贵的,因为没有任何共享。
如果程序崩溃或被杀死,则不删除该文件夹(在Unix上杀死-9,在Windows上由任务管理器杀死,在Mac OS上杀死“强制退出”)。因此,如果您的应用经常崩溃,您的用户将丢失多个临时文件夹的磁盘空间。_MEIxxxxxx
_MEIxxxxxx
可以使用命令行选项控制文件夹的位置。指定的路径存储在可执行文件中,引导加载程序将在指定的文件夹内创建 文件夹。有关详细信息,请参阅 定义提取位置。_MEIxxxxxx
--runtime-tmpdir
_MEIxxxxxx
使用控制台窗口
默认情况下,引导加载程序会创建一个命令行控制台(Linux和Mac OS中的终端窗口,Windows中的命令窗口)。它为Python解释器提供了标准输入和输出的窗口。您的脚本的使用print
和input()
指向此处。来自Python的错误消息和默认日志记录输出也出现在控制台窗口中。
Windows和Mac OS的一个选项是告诉PyInstaller不提供控制台窗口。引导加载程序启动Python,没有标准输出或输入的目标。当脚本具有用于用户输入的图形界面并且可以正确报告其自己的诊断时,请执行此操作。
Pyinstaller 0的更多相关文章
- ZAM 3D 制作简单的3D字幕 流程(二)
原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表述仅为本人理解,若有偏差和错误请指正! 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇 ...
- ZAM 3D 制作3D动画字幕 用于Xaml导出
原地址-> http://www.cnblogs.com/yk250/p/5662788.html 介绍:对经常使用Blend做动画的人来说,ZAM 3D 也很好上手,专业制作3D素材的XAML ...
- 微信小程序省市区选择器对接数据库
前言,小程序本身是带有地区选着器的(网站:https://mp.weixin.qq.com/debug/wxadoc/dev/component/picker.html),由于自己开发的程序的数据是很 ...
- osg编译日志
1>------ 已启动全部重新生成: 项目: ZERO_CHECK, 配置: Debug x64 ------1> Checking Build System1> CMake do ...
- 【原创】关于pyinstaller打包的程序执行出错问题,pyinstaller3.5只支持matplotlib3.0.2已经解决
之前,在用pyinstaller打包一个python程序时没有问题,后来不知道什么原因,再打包时出现了所谓的pyinstaller打包报错: RecursionError: maximum recur ...
- windows 下 pyinstaller distutils not included with latest virtualenv (16.4.0)
起因 因为windows下python3.7.2内置venv虚拟环境下pyinstaller错误问题,切换virtualenv但是发现最新版本又有其他问题 - -! ModuleNotFoundErr ...
- Python的支持工具[1] -> 可执行文件生成工具[0] -> pyinstaller
pyinstaller pyinstaller安装方式: pip install pyinstaller 使用方法: cmd –> cd dictionary –> pyinstaller ...
- 使用pyInstaller发布PathMerge的exe版本(py转换成exe)
前言 PathMerge是用python写的一个辅助文件夹合并的小工具,它的特点是不用担心合并后文件会丢失,旧文件会创建副本保存下来,除非你手动删除. 详情见:python开发目录合并小工具 Path ...
- PyInstaller打包步骤简记
pyinstaller 下载地址:http://www.pyinstaller.org/ 下载后用cmd进入解压文件夹 python setup.py install 安装. 最近用pyinstall ...
随机推荐
- struts2学习之基础笔记1
第6章 Strusts 2框架 1 引出 Web App àà MVC àà View 视图(jsp,html,JS) | C(Servlet)Filter,Listneer | M(数据bea ...
- Android FloatMenuSample
项目地址:fanOfDemo/FloatMenuSample crosg/FloatMenuSample transfer from yiming/FloatMenuSample GIF GRADLE ...
- c#中 abstract 和 virtual 的区别与用法
先来看abstract方法,顾名思义,abstract方法就是抽象方法. 1.抽象方法就是没有实现的,必须是形如: public abstract void Init(); 2.拥有抽象方法的类 ...
- UVa 10106 Product 【大数相乘】WA
虽然是错的代码,但是还是想贴出来,最开始WA发现是没有考虑到乘积为0的情况,后来把a*0,0*a,a*0---0(若干个0),0--0(若干个0)*a都考虑进去了:可是还是WA,实在不懂先留在这儿. ...
- 第六章 Python之迭代器与生成器
迭代器 迭代:迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果是下一次重复的初始值 l=['a','b','c'] count=0 while count < len(l): pri ...
- day02 操作系统与编程语言
目录 操作系统 操作系统是什么 操作系统做了什么 文件是什么? 为什么要有操作系统 操作系统有什么用 应用程序的启动和操作系统的启动 复盘QQ的启动 操作系统启动的流程 编程语言分类 机器语言 汇编语 ...
- HDU 6125 Free from square (状压DP+分组背包)
题目大意:让你在1~n中选择不多于k个数(n,k<=500),保证它们的乘积不能被平方数整除.求选择的方案数 因为质数的平方在500以内的只有8个,所以我们考虑状压 先找出在n以内所有平方数小于 ...
- 全面的framebuffer详解
一.FrameBuffer的原理 FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口. Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIO ...
- Opencv 视频转为图像序列
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50283303 基于OpenCV的视频转 ...
- 洛谷 1156 dp
洛谷1156 dp 类背包问题 老久没有自己想出来过dp方程了,,,虽然到最后还是只写了30分,,, 设dp[j]表示最大生命值为i时的最大高度,则对于每个物品,可以选择吃掉或者放上去,即转移为dp[ ...