Python如何将py⽂件打包成exe
安装pyinstaller
打开cmd窗⼝,输⼊pip install pyinstaller,命令⾏输出successfully表⽰成功。
⽣成exe⽂件
⼀、单个py⽂件
在py⽂件⽬录下,打开cmd窗⼝,输⼊pyinstall -F XXX.py,执⾏成功的话,会在当前⽬录⽣成⼀个dist⽂件夹,⽂件在此⽂件夹下。
如果是图形窗⼝,不想要控制台出现的话,可以pyinstall -F XXX.py --noconsole
:
安装好pyinstaller后,我们会得到两个辅助⼯具,pyi-grab_version和pyi-set_version。
1. 使⽤pyi-grab_version创建版本信息模板⽂件,⾸先到⼀个有版本信息的⼯具,在此⽬录下打开cmd窗⼝,输⼊pyi-
grab_,执⾏成功后,会在此⽬录下获得⼀个file_⽂件,这个就是我们要的⽂件版本信息模板⽂件。
2. 有了模板⽂件后,我们需要修改⾥⾯的内容,换成我们⾃⼰想要的版本内容,最好⽤nopad++打开。
3. 在打包时加⼊版本信息。
⽅法⼀、还没有打包成exe的py⽂件
pyinstaller -F --version--file file_ XXX.py
⽅法⼆、已经打包好的exe
pyi-set_version file_
⼆、
1、尽量将所有要执⾏的py⽂件放在⼀个⼤⽂件夹下(⾥⾯允许有多个⽂件夹)
2、命令⾏输⼊pyi-makespec main.py 或者 pyi-makespec -F main.py(main.py为Python程序的⼊⼝py
⽂件)。
pyi-makespec main.py --> 打包之后会⽣成⼀个⽬录
pyi-makespec -F main.py --> 打包之后只会⽣成⼀个exe
选择⼀个命令即可。
3、现在⽂件夹下⽣成了⼀个main.spec⽂件和两个⽂件夹
4、编辑main.spec⽂件,到a = Analysis()
第⼀个参数,放置需要⽤到的所有py⽂件。格式为['aaa.py', 'bbb.py', 'ccc.py']。注意:同级⽬录下,直接写⽂件名。如果不在同⼀个⽂件下,写完整路径,['aaa.py', 'bbb.py', 'c:\\user\\ccc.py']
a = Analysis(['pin.py'],
pathex=['F:\\python_work\\pytest\\pin'],
binaries=[],
datas=[],
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)
第四个参数,datas=[]。如果⽤到了⾮py⽂件需要打包,那么到datas列表,将⾮py⽂件的路径与⽂
件夹名写在元组⾥。⽐如,有图⽚⽂件的话,可以放在images⽂件夹中,程序中调⽤图⽚⽂件时,需要⽤绝对路径,才能打包成功。
例如:
datas = [('C:\\project\\test\\images','images'),('C:\\project\\test\\EventLogs','EventLogs')]
datas:
1. 第⼀个参数是Python中的⾮py类型⽂件的路径
2. 第⼆个参数是⾮py⽂件保存此资源的⽂件夹名称,要和路径中的⽂件夹名称相同。
第五个参数hiddenimports=[]。如果打包之后出现No 可以采⽤临时解决⽅案,将缺少的模块放置在这个列表中。hiddenimports=['PyQt5.sip']
5、保存⽂件,在.spec⽂件路径下打开命令⾏,输⼊pyinstaller -D main.spec 或者 pyinstaller main.spec
如果在第2条中选择了pyi-makespec -F main.py ,那么此处只需要执⾏pyinstaller main.spec即可
6、⽣成的exe程序在dist⽂件夹中,dist⽂件夹⾥包含了整个项⽬所需环境,可在其他电脑中进⾏使⽤。
特别注意:如果写了关于pyqt5界⾯的程序的话,并且PyQt5版本在5.13.1之前的话,在其主函数⾥⾯导⼊PYQT5之前需要加上如下代码,在进⾏打包
import os
if hasattr(sys, 'frozen'):
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog
from PyQt5 import QtCore, QtGui, QtWidgets
如果PyQt5界⾯的程序还报了No module的错误的话,可以采⽤临时解决⽅案,在spec⾥⾯hiddenimports⾥⾯放置那个module,如果想要exe运⾏时不显⽰cmd,可以在console那⾥打false。
a = Analysis(['aaa.py'],
pathex=[''],
binaries=[],
datas=[],
hiddenimports=['PyQt5.sip'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='game_2048',
debug=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=False )
如果需要为exe加上图标的话,可以在console后⾯加上icon='',填写绝对路径,另外图标的后缀是ico,试过使⽤jpg格式的,打包没成功。exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='game_2048',
debug=False,
python怎么读取py文件bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False,
icon='F:\\2048game\\resouces\\neko.ico' )
ok.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论