PyInstaller 问题制作使用转换器和 PyQt5 库的 exe 文件

Posted

技术标签:

【中文标题】PyInstaller 问题制作使用转换器和 PyQt5 库的 exe 文件【英文标题】:PyInstaller problem making exe files that using transformers and PyQt5 library 【发布时间】:2021-12-20 18:13:51 【问题描述】:

所以我正在使用 huggingface 库进行 AI 项目,我需要将其转换为 exe 文件。我使用 PyQt5 作为界面,以及来自 huggingface 的转换器和数据集库。我尝试使用 PyInstaller 将其转换为 exe 文件,它确实完成了项目的 exe 文件的构建,但是当我运行 exe 文件时它给了我这个错误:

Traceback (most recent call last):
  File "transformers\utils\versions.py", line 105, in require_version
  File "importlib\metadata.py", line 530, in version
  File "importlib\metadata.py", line 503, in distribution
  File "importlib\metadata.py", line 177, in from_name
importlib.metadata.PackageNotFoundError: tqdm

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "App.py", line 5, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 476, in exec_module
  File "transformers\__init__.py", line 43, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 476, in exec_module
  File "transformers\dependency_versions_check.py", line 41, in <module>
  File "transformers\utils\versions.py", line 120, in require_version_core
  File "transformers\utils\versions.py", line 107, in require_version
importlib.metadata.PackageNotFoundError: The 'tqdm>=4.27' distribution was not found and is required by this application.
Try: pip install transformers -U or pip install -e '.[dev]' if you're working with git master
[736] Failed to execute script 'App' due to unhandled exception!

[process exited with code 1]

我的代码中的第 5 行是用于导入转换器库的代码。

...
4| from PyQt5.QtCore import QThread, QObject, pyqtSignal
5| from transformers import AutoTokenizer, AutoModelForQuestionAnswering, pipeline
...
...

这是我的 .spec 文件:

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None

a = Analysis(['App.py'],
             pathex=[],
             binaries=[],
             datas=[
                ('./resources/images/logo.png', '.'), 
                ('./resources/model/config.json', '.'), 
                ('./resources/model/pytorch_model.bin', '.'), 
                ('./resources/model/special_tokens_map.json', '.'), 
                ('./resources/model/tokenizer.json', '.'), 
                ('./resources/model/tokenizer_config.json', '.'), 
                ('./resources/model/vocab.txt', '.')
            ],
             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='App',
          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 , icon='logo.ico')
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas, 
               strip=False,
               upx=True,
               upx_exclude=[],
               name='App')

非常感谢您提供的任何帮助,谢谢 :D

【问题讨论】:

看看fbs 我试过使用 fbs,它只是给我一个错误,说:FileNotFoundError: Could not find msvcr100.dll on your PATH. 每次我尝试使用 fbs freeze 构建代码时 即使我已经安装了 Visual c++ resdistributable 2012 【参考方案1】:

首先,pip install tqdm,如果您还没有的话。其次,指定Lib/site-packages 的路径。您可以通过以下任一方式执行此操作:

    .spec 文件中为pathex 添加一个参数 (.venv 用于本地目录中某个文件夹 .venv 的虚拟环境,或者如果您不使用虚拟环境,则为全局 Python 安装的绝对路径 Lib/site-packages):
pathex=['.venv/Lib/site-packages']
    从命令行指定Lib/site-packages 的路径:
pyinstaller --paths '.venv/Lib/site-packages' my_program.py

来自pyinstaller docs

pathex:搜索导入的路径列表(例如使用 PYTHONPATH),包括由 --paths 选项给出的路径。

一些 Python 脚本以 PyInstaller 无法检测到的方式导入模块:例如,通过使用带有可变数据的 __import__() 函数、使用 importlib.import_module() 或在运行时操纵 sys.path 值。

【讨论】:

以上是关于PyInstaller 问题制作使用转换器和 PyQt5 库的 exe 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pyinstaller 使用 torch 模块制作 exe 文件?

运行使用pyinstaller制作的exe文件时出错

将python文件(.py)转换为可执行文件(.exe)的方法

第16章 pyinstaller库的使用

使用 PyQt5 制作应用程序后无法打开 .exe

pyinstaller的使用