使用PyInstaller打包Python程序

使用PyInstaller打包Python程序,第1张

PyInstaller是一个用来将Python程序打包成独立可执行软件的工具,支持 Windows、Linux 和 Mac OS X。生成的可执行软件在没有Python的环境中可以直接运行,方便软件分发,进一步降低使用成本,提升使用效率。

下面演示如何使用 PyInstaller 将程序打包成Windows下的exe软件。

使用pip的方式进行安装,这样可以自动安装其他依赖库。

如果pip还未安装,请参考我的另一篇文章《 Python pip包管理工具 》

在cmd命令行控制台或者VS Code内置的终端输入命令行生成应用,首先将当前路径切换到Python程序所在的路径(如下示例的SubOcrpy文件在python文件夹下的SubOcr文件夹内),然后输入生成应用的命令。

命令执行成功后在 I:\work\python\SubOcr\dist 文件夹下生成了SubOcr文件夹,里面包含了SubOcrexe文件。整个SubOcr文件夹就是一个绿色软件,随便移动到任何位置都可运行。

实际上在用pyinstaller命令时会在Python程序的所在路径生成一个后缀为spec的同名文件,然后根据此文件的配置生成应用,这就是PyInstaller的原理。这样做的好处是spec保存了生成应用的配置,每次重新生成应用时可以省略指定参数,尤其是指定了其他的资源、程序库时。我们可以通过以下命令先生成spec文件。

pyi-makespec的命令参数跟pyinstaller的相同,在生成spec文件后可以对其部分选项进行编辑(可以用VS Code或自带的记事本编辑),添加更多参数,然后再用pyinstaller命令生成应用。

spec文件的主要选项:

上面示例的SubOcr用到了opencc和opencv-python,其中opencc下的数据文件和opencv-python下的dll文件在生成应用时不会自动导入(缺少这些文件应用无法正常使用),因此需要在spec文件中指定路径。对spec文件的修改如下:

以上便是PyInstaller打包Python程序的全过程,如果在此过程中遇到问题,可以在评论区留言,定当知无不言,言无不尽。

VB可以编译生成一个可执行文件独立运行的。如果VB在运行时需要调用一些他人系统中没有的控件或使用了其他配置文件的方式,就需要把相关的文件带上,可以简单地把需要的文件和可执行文件放在一起用RAR或ZIP压缩发布,这样用户下载解压即可使用,也可以使用安装制作程序制作成安装程序包发布。

打包多媒体体作品,简单地讲就是把作品转换成可执行的程序,可以脱离Authorware环境独立运行。当然我们在打包多媒体作品时不但需要主程序,还需要其他的支持文件,如Xtras文件、DLL文件、外部媒体文件等,缺少了所需的文件,作品将不能正常运行,本节主要介绍主程序的打包过程。

1)打开一个需要打包的多媒体作品。

2)选择文件→发布→打包菜单,出现“打包文件”对话框。

3)“打包文件”对话框中4个复选框的解释如下。

l “运行时重组无效的链接”:在运行程序时,恢复断开的链接。

l “打包时包含全部内部库”:将当前课件链接的所有库文件成为打包文件的一部分。

l “打包时包含外部之媒体”:将当前课件中使用的外部媒体成为打包的一部分,但不包括数字**和Internet上的媒体文件。

l “打包时使用默认文件名”:选中的话,自动用被打包的文件名作为打包的文件名。

4)“打包文件”对话框中下拉列表框:将作品打包成不同的类型。

l 无需 Runtime:打包后的扩展名为“A7R”,需要用RUNA7W程序来运行打包的文件。

l 应用平台 Windows XP,NT and 98 不同:打包后的扩展名为“EXE”,可独立在“Windows 9x”或“Windows NT/XP”32位 *** 作系统中运行

5)设置完毕后单击保存文件并打包按钮,d出文件保存对话框,单击保存按钮后Authorware开始打包动作。

722 打包所需的文件

在我们制作多媒体作品时,往往会出现作品打包后不能正常运行的情况。其实一个完整的多媒体作品不仅要包含主程序,还必须将主程序所需的外部文件一起发布,如Xtras插件、库文件、动态链接库DLL等,这些外部文件在主程序打包时是不被打包的。

Authorware7有一项“一键发布”的功能,可以自动查找所需的外部文件,不再需要我们人工的添加,在下一节进行详细介绍。

不同的多媒体程序在打包时所需的文件都是不一样的,下面来介绍需要的文件类型。

一、在主程序中引入的外部媒体文件

在多媒体制作中,如果我们用的图形、外置声音文件、数字化**、视频文件等是作为外部文件引入的,那么我们在发布作品时必须把这些文件和主程序一起发布,否则会出现文件找不到的错误。

二、Runa7w32exe

如果我们在打包多媒体作品时选用的“无需 Runtime”项,那么必须带上Runa7w32exe这个文件。

三、所需的字体

为了作品的美观,如果你在多媒体中应用了非系统字体,发布作品时你必须要把这些字体一起发布,否则会出现作品运行在其他机子上的时候,字体全变了,这样影响了多媒体演示的效果。你可以用知识对象把这些字体安装到用户机上就可以了。这个在前面的事例中介绍过。

四、多媒体作品中所用到的外置软件模块(Xtras、ActiveX控件、U32、DLL)

如作品中使用了第三方开发的过渡效果插件,发布作品时把所用到的X32文件复制到Xtras文件夹下即可。用到的外部函数U32、动态链接库DLL一般复制到主程序所在的目录下。

例如,引入GIF动画必须带上Awiml32dll文件,引入动画精灵则需要Msagentu32文件等。

五、多媒体所使用的所有Xtras类型详解(For Windows 98/2000/NT/XP)

所有的打包文件都需要Mix32x32、MixViewx32、Viewsvcx32这三个文件。各种类型文件打包时所需要的Xtras文件见522小节,这些文件都可以在Authorware安装目录或安装目录的Xtras文件夹下找到。

723 如何使用Authorware 70的

一键发布功能

“一键发布”是Authorware 60以来新增的功能,这个新功能可以轻松地将你的应用程序发布到Web、CD-ROM或局域网,使得发布Authorware程序非常简单。

在发布之前,Authorware 70将对程序中所有的图标进行扫描,找到其中用到的外部支持文件,如Xtras、Dll和U32文件,还有AVI、SWF等文件,并将这些文件复制到发布后的目录。所以,课件制作者根本不需要担心用户在网上使用你的课件时会出现找不到文件的错误。

下面介绍发布的具体步骤。

1)选择文件→发布→发布设置菜单或按Ctrl+F12快捷键,设置发布选项,Authorware 70首先对程序中所有的图标进行扫描。

2)然后出现发布设置对话框。

“格式”选项卡中,是关于发布文件类型的一些设置。可以发布为带播放器的With Runtime文件(EXE文件)、不带播放器的Without Runtime文件(A7R文件)、使用网络播放器播放的For Web Player文件(AAM文件)或网页(HTM文件)文件。

“打包”选项卡中是关于打包文件的一些设置。如是否将库文件一同打包、是否将所有媒体一起打包、是否重组断开的链接等。

“网络发布”选项卡中,可以设置发布后每一块文件的大小,根据不同的网络连接速度,将文件分为不同大小的多个文件,使得在网速较慢时也能流畅播放。是否显示安全对话框等,如选中,则Authorware Web Player网络播放器在下载文件的时候将显示安全对话框。

“网页”选项卡是关于发布HTM文件的一些选项。用于设置嵌入Map文件的网页的属性,比如设置网页标题、作品画面的大小、Authorware Web Player网络播放器的版本等。你的Authorware程序将被链接到这个HTM文件中,但是在浏览时需要用户安装了Authorware Web Player才能正确浏览,如果用户机器上没有Authorware Web Player,将提示用户下载,这一点和Flash的SWF插入网页是相似的。

在“文件”选项卡中,可以看到当前应用程序的一些支持文件,如Xtras、Dll和UCD等,文件发布时必须将这些文件同时发布才能保证不会出现意外的错误。当然你也可以通过“添加文件”自己在其中手动添加一些文件,如使用说明书、帮助文档等,以及更改路径等。

以上的设置一般不需要特别设定,如果你有特殊要求,设置好的各选项还可以使用导出命令保存为注册表文件(REG文件),以方便下次使用同样的设置。

设置好后,单击发布按钮,应用程序就成功发布了,发布成功一般会生成两个多媒体作品版本,一个是WIN9X版本,另一个网络版(如果要运行这个版本需要安装“Autorware Web Player 70”)。当然也可以只生成其中之一。

724 Authorware作品如何在浏览器中运行

在很多情况下,需要制作者以网页格式发布Authorware作品,譬如在Internet和局域网中浏览和运行。现以已有的testa7p及其库文件l_testa7l为例来介绍一下如何在IE中运行Authorware 70作品。

一、在Authorware中 *** 作

1)库文件(a7l)的主名不能与片文件(a7p)的主名同名;Authorware Web Package产生的文件扩展名皆为aam。另外,不能起中文文件名。

2)在Authorware中打开testa7p,单击流程图(不是库),选择 文件→打包命令,在 “打包”对话框中,选择“无需Runtime”。

3)选择“打包时包含外部之媒体”。

4)单击保存文件并打包按钮,在当前目录下产生相应的testa7r和l_testa7e文件。

二、在Authorware “Web 打包”中 *** 作

1)启动Authorware “Web 打包”。

2)打开已被打包的testa7r,确定后出现“选择文件打包,使其适用于Web”对话框,在这里我们以默认的testaam存盘。

3)出现“分片设置”对话框,在“分片设置”项中我们仍采用默认的名字,在“分片大小”项中,默认的碎片大小是16KB。如果用户是通过56KB的MODEM浏览你的Authorware作品,则该数字在12KB至24KB比较合适,否则可以把该数字设得大些(可在原来的16 000后多添几个零即可),以免产生过多的碎片文件(ass)。

4)在IE中打开testaam文件,看看运行是否正常。

三、在记事本或其他HTML编辑器中编辑testhtm

1)建立网页的基本语言结构:<html> <head> </head><body></body></html>

2)在Body部分写入:EMBED src=">

您好,登陆器打包是指将一系列的登陆程序,例如用户名和密码,以及其他一些必要的信息,打包成一个文件,以便用户可以在不同的计算机上登陆系统。这样,用户就可以在不同的计算机上登录,而无需重新输入用户名和密码。登陆器打包还可以用来保存用户的个人设置,以便在不同的计算机上保持一致的设置。此外,登陆器打包还可以用来保存用户的个人文件,以便在不同的计算机上访问和编辑这些文件。

这个是一个跨世纪的想法,异想天开指数我给五颗星!

java生成的jar包之类的其实并不能执行,它需要虚拟机运行环境,换句话来说,它并不是PE文件,Jar包也只是IL语言的中间层,java源码被编译后,再根据JIT一句句地翻译执行!当然他还有其他的机制,并不是保证每次运行都是有翻译的,事实上他首次对某运行代码段进行翻译会存储到临时空间中,下次执行时则不再翻译(这是JIT优化后的功能)。而这个JIT在不同的机器上(硬件环境不同,会将同一句的IL翻译成不同的机器可 *** 作指令,这也就是移植性的真正内涵)。原理是样的!

C#基于的想法与Java是相同的,它也是如此,但生成的dll或exe其实是一种特殊的PE文件,也是需要net framework 运行环境支持的!也就是JIT(即时翻译)!它与java运行环境实现的功能是一样的,首次运行某一代码段就翻译某段,但它会有一个镜象存储那里,就是我们说的Native,当翻译过的代码段可以直接从Native中直接运行,跳过JIT翻译从而提高性能。当然,C#的这个dll/exe也是中间语言(IL),只不会老大总是厉害点,它实现的并非是标准的IL,而是微软自家的IL,叫MSIL!换句话来说,两者原理相同,但生成后的IL却是不同的!

C++其实是一门语言而已!它也被net 作为上层语言,也就是说他也存在一个C++net。这个当然生成的与C#一样的,其实net上层有多个编程语言的,不管你是VB/C#/F#/J#还是C++,最终生成的都是MSIL,微软的目的就是上层使用不同语言的程序员能在一起工作,这就是net,生成的都是MSIL的中间语言的dll/exe。

但是,虽然是在VS中,还存在另一种C++的开发形式,这就是我们说的MFC等相关的开发,其实这时VS开发环境并不是执行net,而此时VS完完全全就是Visual C++一样的功能。当然这种生成的移植性差了,但他生成的却是windows可以直接执行PE文件,如dll或exe!这种dll/exe并不是MSIL中间语言,而是标准的windows可执行的二进制文件!不须在windows中安全net运行环境可以直接运行!

所以针对这三者的联接,或者说打包成一个文件,其可能性不大了!jar包中是IL,net中的MSIL,而C++则完全是二进制PE文件!你要连接成什么?!

所以这是一个跨世纪难题——不过好象不需要解决!

多说一点,net core事实上是可以生成ubuntu等linux分发版的程序的,它是怎么实现的?其实其秘密就在于net中Native文件——如果你指明了是在某个发行版本的linux时,net core把MSIL直接翻译成对应版本的Native(这玩意可以直接可以执行的!),这就是为什么net core可以跨平台的作用(你知道它是怎么跨的吗?源码跨而已——如果你发布时写dotnet publish -r ubuntu-1404 那么生成的文档也只能用到ubuntu 1404上,换到ubuntu 1604上运行就会出错!所以也可以是winrm 或 win x64等参数),换句话来说,net生成的dll我们只须指定是X86还是X64/或者IA 64等形式即可,当然也可以X86运行到任何windows系统上!只有一个生成的文件,而跨平台的net core其实并不再具有移植性了!这下你知道Native文件的作用了吧?其实我们在netcore没有推出之前就想办法玩过native文件以提高性能(但丢失了移植性)。

但C++呢,其实这个吧,它也是具有这样的特性的,他生成的文件有一定的移植性,或者多数时候我们需要在不同的系统上进行编译!比如在windows上,编译后可以被不同的windows平台使用,但在linux系统上,一般是下载gcc,然后下源码进行当机编译!换句话来说,net core编译是一个参数,而c++则使用的是“硬参数”由不同的 *** 作系统自己去编译!这你让net core与C++情何以堪?更别说那么还有一个Java!那家伙为了保证自己的可移植性,必须需要虚拟机!

所以吧,你这个问题,其实只是想问问到底有谁懂这些底层的原理而已!虽然它们三个语言关系很近(java是以C++为蓝本,简化C++语言增加类库与虚拟机机制,所以程序员称其为C++升级版——功能升级,被亲切地称为C+++,开明人士认为其对C++语言本身是一种简化——语言简化版,被称之为C++-,而C#则是微软看到Java的优势后生成的语言,为了夺回自己C++的用户群,据说内定就叫Java+,也就是java的升级版!)他们三关系确实很近!

其实吧,针对语言发展上还有一个小秘密:微软有C语言,有C+语言(国内流行的一行左右,很多人不知道,我说这个典的时候,居然有一个哥们上学时就学了一年C+,不过他现在是电工,哈哈),还有C#语言(其实就是C++++呗!),你可能会奇怪,为什么没有C+++语言?对,就是没有这个语言,这个称号是C++的疯狂的时候被送给了Java了!那么程序员都叫Java语言是C+++或C++-!当然C#语言被叫做Java+,据某些报道说是一个内定版本,但没有人称其为Java+的!

三者虽然“近亲”,但一点都不“合”的!

请您检查:

您的窗体和工程文件是否在一个文件夹下若不在同一文件夹,拷贝到同一文件夹

打包过程中或在解压过程中是否-窗体文件frm被杀毒软件误杀或损失

如果找不出原因,而且还在本机上,那么:

(1)找到窗体文件frm,与frx(如果有的话),将两个文件拷贝至工程文件所在文件夹

(2)拖动frm,到vb IDE的工程资源文件管理窗口

(3)保存工程,试运行,并试着在关闭vb后,将文件夹剪切至他处,再打开运行,若如此,一切正常则ok

以上就是关于使用PyInstaller打包Python程序全部的内容,包括:使用PyInstaller打包Python程序、VB程序一定要打包发布后才能交付用户使用吗仅仅生成一个可执行文件,难道用户就不能用了吗、如何将一个Authorware文件打包发布等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9824920.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存