python Pyinstaller“无法执行脚本pyi_rth_pkgres”并且缺少软件包

rqmkfv5c  于 2023-03-16  发布在  Python
关注(0)|答案(9)|浏览(342)

这是我第一次在这里发布问题,因为我的大部分问题已经被别人回答了!我正在用python开发一个GUI应用程序,并尝试使用pyinstaller将其打包到一个单独的文件夹和.exe中,以便于移植。目前,我使用windows 10和anaconda 3来管理我的python包。该应用程序依赖于tkinter、pillow、numpy、scikit-learn、opencv、该应用程序使用一个主www.example.com文件进行格式化GUI.py,该文件创建了许多其他文件的对象(其中许多文件存储在子文件夹中,因为此GUI正在替换一个用于相同目的的命令行实用程序)。我遇到的问题(如标题中所示)是.exe抛出错误块:
追溯(最近调用最后调用):文件“站点包\PyInstaller\加载程序\rhooks\pyi_rth_pkgres.py”,第11行,位于文件“c:\用户\gurnben\anaconda 3\envs\opencv\lib\站点包\PyInstaller\加载程序\pyimod 03_importers.py”,第389行,位于加载模块执行程序(字节码,模块.dict)文件“站点包\设置工具-20.7.0-py3.5.egg\pkg_resources__init__.py”,第68行,位于文件“站点包\设置工具-20.7.0-py3.5.egg\pkg_resources\extern_init__.py”,第60行,位于加载模块导入错误:“ Package ”包是必需的;通常这是捆绑在这个软件包中的,所以如果您收到这个警告,请咨询您的发行版的打包程序。无法执行脚本pyi_rth_pkgres
当我查看warn.txt时,它给出了大量丢失的包的列表,包括实际上在单个文件夹包中的一些包的部分。
然而,我已经成功地让它识别了opencv中的dll文件,它没有被列在丢失的文件夹中(ffmpeg也没有,但是我在文件夹中没有看到任何ffmpeg文件)。我必须传入一个自定义路径来让它包含opencv文件,因为此时它们不在anaconda中。
任何提示或想法,为下一步故障排除步骤?我非常感谢所有的帮助你提供,我可以上传任何代码,文件等,这将有助于您诊断的问题。在此期间,我会继续寻找解决方案自己!

zc0qhyus

zc0qhyus1#

同样的问题在这里:

  • 操作系统:Win10
  • Python语言:3.7
  • pip install pyinstaller安装的pyinstaller

修复(与上述解决方案相同,无需下载):

pip uninstall pyinstaller
pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip
t0ybt7op

t0ybt7op2#

扩展Vikash Kumar's答案,通过添加--hidden-import argument to the command构建应用程序。
例如,运行下面给出的命令对我很有效。
"pyinstaller --hidden-import=pkg_resources.py2_warn example.py"
更新:添加缺失的“=”

pbgvytdp

pbgvytdp3#

添加行:

import pkg_resources.py2_warn

我的代码帮助。

j8yoct9x

j8yoct9x4#

pyinstaller --hidden-import=pkg_resources.py2_warn --onefile example.py

你可以使用这个真的它的作品不需要安装或卸载任何东西只是使用这个它只会创建一个文件,下面的代码将不会创建黑色窗口也如果你正在创建一个Tkinter应用程序主要

pyinstaller --hidden-import=pkg_resources.py2_warn --onefile --noconsole example.py
dy2hfwbg

dy2hfwbg5#

进一步迭代埃尔顿费尔南多的最佳隐藏答案。

# -*- mode: python ; coding: utf-8 -*-
from kivy_deps import sdl2, glew
import pkg_resources.py2_warn # before you add it to hiddenimports, import it here.
import dependency_injector.errors
import six
block_cipher = None

a = Analysis(['...'],
             pathex=['..'],
             binaries=[],
             datas=[],
             hiddenimports=['pkg_resources.py2_warn', 'dependency_injector.errors', 'six'], # This is the line you need
             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)
exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='...',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
                Tree('./'),
               a.binaries,
               a.zipfiles,
               a.datas,
               *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
               strip=False,
               upx=True,
               upx_exclude=[],
               name='...')

每当遇到导入错误时,只需在顶部导入它们,并将它们作为字符串添加到数组中的hiddenimports。

qmelpv7a

qmelpv7a6#

我也遇到过同样的问题。通过使用开发者的分支版本重新安装pyinstaller解决了这个问题,请按照以下说明操作:https://github.com/pyinstaller/pyinstaller/issues/2137
步骤如下:

  • 删除PyInstaller pip uninstall pyinstaller
  • github下载压缩文件。
  • 解压缩文件。
  • 确保您位于“www.example.com“目录中setup.py,然后运行:python setup.py install
46qrfjad

46qrfjad7#

我扩展**@vikash-kumar答案**。

pyinstaller工具具有命令行参数--hidden-import

它解决了我的主题问题。

更多信息:

https://web.archive.org/web/20200601130821/https://pyinstaller.readthedocs.io/en/stable/when-things-go-wrong.html#listing-hidden-imports网站。

qlckcl4x

qlckcl4x8#

这是因为他没有复制一个依赖项,我是这样解决的。

  • 我的程序.py

这将创建一个my_program.spec.它是一个基本配置文件。
用任何文本编辑器打开它.搜索
隐藏导入=[]
编辑到。
隐藏导入=[“pkg资源. py2警告”]
现在让我们调用pyinstaller,传递配置文件而不是程序

  • 我的程序.spec
ffx8fchx

ffx8fchx9#

为site_packages提供正确的路径为我解决了这个问题。最初,我从本地用户环境提供站点包路径。即使使用多个--hidden-import,exe仍然失败,并显示错误“由于未处理的异常,无法执行脚本'pyi_rth_pkgres'!”,并且正在查找jaraco包。然后更改为全局站点包路径,再次构建软件包,它工作了。下面是供参考的命令
pyinstaller --排除模块PyQt 5-p数据Loader_cy.py --隐藏导入数据Loader_cy -p C:\ProgramData\Anaconda 3\Lib\站点包--隐藏导入= Torch 视觉--隐藏导入=numpy --隐藏导入= pkg资源. py2_warn--隐藏导入=打包--隐藏导入=pkg资源--隐藏导入=打包.版本--隐藏导入=打包.说明符--隐藏导入=打包.要求--隐藏导入=pkg资源.供应商.jaraco --onefilemain.py

相关问题