笔者因为课上有需要利用pyinstaller将.py文件代码和资源文件(图片,附属第三方库等)打包成单个exe可执行文件,查找了各大网站资料(三十个以上),发现只要其中一篇的源码写有可用方法,其内容被笔者整理下来供大家参考,如有不足或缺漏可指出,烦请谅解。
pyinstaller
pip方式通过阿里云镜像站下载(因为默认清华源可能会有卡顿):
pip intsall pyinstaller -i https://mirrors.aliyun.com/pypi/simple/
建议使用新的虚拟环境进行打包,具体方法看第五步的小细节备注
一般来说单个exe的打包方式为:
以下 test.py 文件为当前你所需要打包的代码的主文件入口
pyinstaller -F test.py
但是在此篇中选择的方式是spec文件进行打包:
建议将cmd终端cd到一个干净文件夹下进行打包,在此文件夹下放入要打包的.py文件和资源文件,如
pyecharts是我要打包的资源文件,pyecharts在当前使用的python目录下,可以直接进行搜索pyecharts找到后打开文件位置并复制到当前打包的文件夹,所以跟.py文件放为一起方便后续指定路径打包。
先生成spec文件:
pyinstaller -F test.py
然后这一步操作只要他的spec文件保留,dist和build等其他目录全部删掉,然后打开spec,进行下一步的编辑。
举个例子,我要打包D盘下的test.py和他的附属资源文件夹pyecharts,下面的数据文件放入方法是整理了一位大牛博主qhjink的博客所见,感谢他的点子。
但是!!!值得一提的是
数据的书写格式要清晰
第一位路径和文件名标清楚,第二位是虚拟创建的文件夹的名称
added_files = [('D:/pyecharts', 'pyecharts' )]
比如你第一位的D:/pyecharts就是从环境中找到pip下来的pyecharts库的目录,第二位就是exe建成后运行生成一个虚拟目录的文件名,和第一位同名!!!
按照上面第三步的生成spec文件后,右键以文本方式打开进行编辑,可见到
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
added_files = [('D:/pyecharts', 'pyecharts' )]
#added_files是数据文件的位置,括号里的第一位要填入文件名和绝对路径,
# 第二位是被打包成exe后所用到的虚拟文件名名称(19物联网的同学直接复制之段吧,路径改一下其他的不动)。
a = Analysis(['test.py'],
pathex=['D:\\'],
binaries=[],#这里可以放入你的环境所依赖的一些库,如TensorFlow或pyecharts等
datas=added_files,#这里改成上面的数据文件列表则可引入资源文件夹和文件
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='test',# 打包后生成的文件名称(可自行修改)
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
icon = 'pkq.ico')
#上面的icon参数一般要自己加,并不会帮你生成,也可调用终端命令进行ico打包
打开终端cd进入指定打包路径进行spec文件方式打包:
pyinstaller -F test.spec
(1)利用第三方编辑器调用终端的时候,如果是用pycharm可以在terminal终端的方式打开,而且建议最好新建一个虚拟环境,可以选择anaconda3,因为一些老的环境在无意中会给你的打包文件多增加上那么几十Mb甚至一两百Mb的冗杂文件。
(2)利用cmd打开指定的环境或者虚拟环境,环境制作器为anaconda3的情况下,可使用win+R组合键打开cmd,放入conda.bat activate TF2.1(TF2.1为读者所创建的虚拟环境名称),则可进入该虚拟环境,要创建虚拟环境的的话,点这里喔
(3)如果要调用pyecharts库的代码文件打包时,发现运行不了,可将pyecharts手动从python目录下复制到当前打包所在的路径,如果缺少了pyecharts一起打包进exe,程序可能会出错。
(4)第四步骤中的代码中在最终形成的exe文件打开后会附带一个终端显示,如果想不让程序自己关掉,可在原来的.py文件引入os库结尾加上os.system("")即可,或者可以关闭它,打包时加入-Fw,使用方法为:
pyinstaller -Fw test.spec
如有疑问或质疑可在下方评论区交流,感谢查阅!!