Python如何将py文件打包成exe

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Python如何将py⽂件打包成exe
安装pyinstaller
打开cmd窗⼝,输⼊pip install pyinstaller,命令⾏输出successfully表⽰成功。

⽣成exe⽂件
⼀、单个py⽂件
在py⽂件⽬录下,打开cmd窗⼝,输⼊pyinstall -F XXX.py,执⾏成功的话,会在当前⽬录⽣成⼀个dist⽂件夹,XXX.exe⽂件在此⽂件夹下。

如果是图形窗⼝,不想要控制台出现的话,可以pyinstall -F XXX.py --noconsole

安装好pyinstaller后,我们会得到两个辅助⼯具,pyi-grab_version和pyi-set_version。

1. 使⽤pyi-grab_version创建版本信息模板⽂件,⾸先找到⼀个有版本信息的XXX.exe⼯具,在此⽬录下打开cmd窗⼝,输⼊pyi-
grab_version XXX.exe,执⾏成功后,会在此⽬录下获得⼀个file_version_info.txt⽂件,这个就是我们要的⽂件版本信息模板⽂件。

2. 有了模板⽂件后,我们需要修改⾥⾯的内容,换成我们⾃⼰想要的版本内容,最好⽤nopad++打开。

3. 在打包时加⼊版本信息。

⽅法⼀、还没有打包成exe的py⽂件
pyinstaller -F --version--file file_version_info.txt XXX.py
⽅法⼆、已经打包好的exe
pyi-set_version file_version_info.txt XXX.exe
⼆、
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 module name.....可以采⽤临时解决⽅案,将缺少的模块放置在这个列表中。

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'):
os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']
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,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False,
icon='F:\\2048game\\resouces\\neko.ico' )
ok.。

相关文档
最新文档