一、安装pyinstaller库
由于本人使用anaconda,因此以Anaconda Prompt进行演示。命令行输入:
pip install pyinstaller
不能使用conda install pyinstaller,否则无法搜索到对应的包
二、将需要打包的程序以及文件放到同一个文件夹里面
三、创建spec文件
打开Anaconda Prompt,将路径切换到放置文件的文件夹:
创建main.spec文件,命令行输入:
pyi-makespec main.py
运行后可以看到文件夹中多出了一个文件:
四、修改main.spec文件
使用记事本打开main.spec文件,按照以下参考进行修改:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['s2t_system.py'], #此项目中所有的python脚本,格式为['aaa.py', 'bbb.py']
pathex=['D:\\演示'], #项目绝对路径,注意必须为双杠\\
binaries=[],
datas=[('1.jpg','.'),('speech2text_model.hdf5','.')], #"." 表示当前路径下
hiddenimports=[],
hookspath=[],
hooksconfig={},
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,
[],
exclude_binaries=True,
name='main', #打包程序的名字
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True,
disable_windowed_traceback=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='main')
1、第一个参数,填写所有py文件名。格式为['aaa.py', 'bbb.py', 'ccc.py']。
注意:同级目录下,直接写文件名。
如果不在同一个文件下,写完整路径,如 ['aaa.py', 'bbb.py', 'c:\\user\\ccc.py']
2、第二个参数pathex,填写该项目的绝对路径。
注意:路径需要使用双杠\\
3、第四个参数datas,填写所有资源文件
注意:格式为元组形式,表示为 (非py类型文件的路径, 非py文件保存此资源的文件夹名称)
建议填写相对路径如 datas = [ ('images\\flappy.ico', 'images'), ('audios\\*.wav', 'audios'), ]
五、运行main.spec文件
打开Anaconda Prompt,将路径切换到放置文件的文件夹:
命令行输入:
pyinstaller main.spec
等待运行结束后,会新增 dist 文件夹,在该文件夹下,有打包好的程序 main.exe
六、常见问题
问题1:
运行生成的exe文件时发生 ImportError : No module named '_pywrap_tensorflow_internal'
解决方法:
在 \\dist\\main 中找到 _pywrap_tensorflow_internal.pyd ,
将该文件剪切到 \\dist\\main\\tensorflow\\python
问题2:
运行生成的exe文件时发生 ImportError : DLL load failed:找不到指定的模块
解决方法:
在 C:\Windows\System32 文件夹中找到 vcruntime140.dll 以及 vcruntime140_1.dll:
复制到与 main.spec 相同的路径,修改 main.spec 的 binaries 参数将上面两个配置文件添加:
a = Analysis(['s2t_system.py'], ##此项目中所有的python脚本
pathex=['D:\\课程学习\\余夏夏老师创新课题\\speech-recognition\\code\\exe'], ##项目绝对路径
binaries=[('vcruntime140.dll','.'),('vcruntime140_1.dll','.')],
datas=[('1.jpg','.'),('speech2text_model.hdf5','.')], #"." 表示当前路径下
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
最后再次运行。