Pyinstaller打包文件
Posted mike2019
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pyinstaller打包文件相关的知识,希望对你有一定的参考价值。
一、安装及基本操作
Pyinstaller可以使用pip安装,在命令行下输入下面这行就可以了。
pip install pyinstaller
如果下载安装包,那么要注意下载相应的win32/64版本,建议所有的程序都统一成32位或是64位版本,这样会减少很多问题。
安装完毕之后,就可以通过以下命令打包了
先转到主脚本所在的地址,例如:
cd C:UsersAdministratorprojects omato
然后执行如下命令:
pyinstaller start.py -F
其中start.py为主脚本,主脚本中调用的模块文件会被自动打包。第三个参数是操作命令,常用的命令有
-F 打包成单个文件 -D 打包成单个文件夹形式 -c 控制台模式,执行程序会跳出控制台, -w 窗口模式,不会跳出控制台
基础的命令就这些,程序名和图标等建议在spec文件中设置。
二、文件调用(音频,图片等)
一开始打包时便不清楚文件调用问题,因此文件一旦移动到别处就没法正常调用。后来看到别人的教程,但这部分也是模棱两可,让人理解不了。后来结合官方文档和别人的教程,终于弄清楚了。
首先在脚本定义一个读取相对路径的函数:
1 Import os 2 Import sys 3 4 def resource_path(relative_path): 5 """ 6 定义一个读取相对路径的函数 7 """ 8 if hasattr(sys, "_MEIPASS"): 9 base_path = sys._MEIPASS 10 else: 11 base_path = os.path.abspath(".") 12 return os.path.join(base_path, relative_path)
然后在需要调用文件的地方用如下格式包裹:
resource_path(‘resources/complete.wav‘)
然后在生成的.spec文件exe = EXE()中加入下面这行:
[(‘resources/complete.wav‘,r‘C:UsersAdministrator esourcescomplete.wav‘,‘music‘),],
元组内的三个项:
第一个为代码中resource_path包裹的地址;
第二个是文件的实际地址;
第三个是打包进程序的文件名字。
这样打包后文件会被正确引用。
如下所示:
1 exe = EXE(pyz, 2 a.scripts, 3 a.binaries, 4 a.zipfiles, 5 a.datas, 6 [(‘resources/complete.wav‘,r‘C:UsersAdministratorprojectsDiary esourcescomplete.wav‘,‘music‘),], 7 name=‘Diary‘, # 这里可以设置可执行文件的名字 8 icon=‘diary.ico‘,# 设置图标 9 debug=False, 10 strip=None, 11 upx=True, 12 console=True ) # 是否开启控制台模式
注意加地址前的r以及行尾的逗号,更新过spec文件后,再重新打包只需要执行pyinstaller start.spec 就可以了。
三、添加图标
图标的设置有两种方式,一种是在执行打包命令时加入下面这句:
--icon=xxx.ico
第二种(推荐)是用文本编辑器或记事本打开执行打包后文件夹内新生成的xxx.spec文件,然后在exe =()中加入一行:
icon = ’xxx.ico‘
(见上面的代码第八行)
xxx.ico 为你要设置的图标文件,其他格式需要转换成ico格式,可在这里在线转换。
(图标文件要放在程序根目录下)
四、其他
- 64位windows上打包的程序不能在32位上运行,反之却可以。
- 每次更改完代码或是spec文件,只需要再重新执行一下pyinsyaller start.spec -F就可以了
五、替代品
如果pyinstaller没有解决你的问题,那么你可以尝试一下下面这两个替代品:
以上是关于Pyinstaller打包文件的主要内容,如果未能解决你的问题,请参考以下文章
ubuntu下使用pyinstaller将python文件打包成exe(py文件中含有keras框架的代码)
如何在win7 64位系统下用pyinstaller打包python代码成exe
如何在win7 64位系统下用pyinstaller打包python代码成exe
《PyInstaller打包实战指南》第二十三节 单文件模式打包OpenCV-Python