Python-pyinstaller打包编译程序(多文件: .py, 图片, 深度学习模型等)

一、安装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)

最后再次运行。

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值