【问题标题】:no module named pkg_resources.py2_warn pyinstaller没有名为 pkg_resources.py2_warn pyinstaller 的模块
【发布时间】:2020-08-17 20:40:26
【问题描述】:

我正在尝试为code here 创建一个可执行文件(Windows 的.exe 文件)。要运行的主文件是src/GUI.py。我发现 pyinstaller 是创建 exe 文件的更好选择。

我尝试了一个文件夹和单个可执行文件选项。我尝试从根目录以及src 目录中创建 exe。

pyinstaller src/GUI.py
pyinstaller src/GUI.py -F
cd src
pyinstaller GUI.py
pyinstaller GUI.py -F

GUI.exe 使用上述所有方法创建。但是每当我尝试运行GUI.exe 文件时,都会收到错误no module named pkg_resources.py2_warn pyinstaller。我尝试在创建它的dist 目录、根目录和src 目录中运行GUI.exe。在任何地方,我都会遇到同样的错误。我该如何解决这个问题?

PS:理想情况下,我希望有一个可以分发的.exe 文件,他们可以独立运行它,而无需安装依赖项或重新创建文件夹结构。但我知道 pyinstaller 只打包代码文件,我必须单独共享图像,并且在运行 exe 文件时,必须重新创建相同的结构。我对此也无所谓。我什至可以共享一个文件夹 exe。我只想共享一个文件或文件夹,用户可以在不安装任何依赖项的情况下运行它们。有可能吗?

PPS:我也愿意使用 pyinstaller 以外的工具。

【问题讨论】:

  • 您选择的答案已过时,请查看备选答案。 @Nagabhushan S N
  • @rfii 感谢您引起我的注意。我想我会顺其自然的。因为当时,Vikramaditya 的回答帮助了我。无论如何,他还添加了一条评论以将用户重定向到您的答案,并且由于您的答案是最高票数,因此它就在它旁边。现在,如果有一个堆栈溢出指南可以将接受的答案更改为当前有效的答案,请指出这一点。我很乐意更改已接受的答案。
  • 哦,好酷,我是菜鸟,不知道它是如何工作的,谢谢您的解释

标签: python python-3.x exe pyinstaller


【解决方案1】:

我喜欢从 .bat 文件运行 pyinstaller。它使我更容易看到所有列出的选项。我遇到了与您构建其他东西时相同的错误,但包括隐藏的导入工作。 这是一个bat文件的例子

del /S /F /Q .\dist\*
del /S /F /Q .\build\*

pyinstaller -F -y --clean^
    --hidden-import="pkg_resources.py2_warn"^
    --hidden-import=h5py ^
    code_to_package.py -n NameOFApp

【讨论】:

    【解决方案2】:

    这些修复都不适合我,我注意到我的问题是错误消息实际上开始了:

    文件"c:\path\to\python36\lib\site-packages\PyInstaller\ loader\pyimod03_importers.py", line 627, in exec_module" 当我使用python3.7(py3.7虚拟环境,Win10)时。我卸载了 Py3.6 并修复了它。

    【讨论】:

      【解决方案3】:

      自 2020 年 7 月 16 日起,升级 setuptools 现在可以解决此错误。不再需要像其他答案规定的那样降级设置工具。见this discussion

      在 Win10 上,使用升级

      pip3 install setuptools --upgrade
      

      但是正如 Vikramaditya 所说,降级到 45.0.0 以下版本也可以。

      【讨论】:

      • 在尝试使用 --onefile 编译时,我仍然得到 25416 WARNING: Hidden import "pkg_resources.py2_warn" not found!25673 WARNING: Hidden import "pkg_resources.markers" not found!
      • @LukeSavefrogs 你解决问题了吗?我也有同样的问题
      【解决方案4】:

      使用PyInstaller --hidden-import=pkg_resources.py2_warn my_script.py 解决此问题。这同样适用于大多数ModuleNotFoundErrors。

      该隐藏模块是在 setuptools 版本 45.0.0 中添加的,并在 49.0.0 中删除,所以无论是降级还是升级都可以修复它。

      请不要像其他人所做的那样通过将import pkg_resources.py2_warn 放在代码顶部来解决此问题,因为如果您将 setuptools 版本更改为上述范围之外,这显然会中断。

      一旦我们最终发布它,这个问题将在 PyInstaller 的 4.0 版本中永久修复。

      【讨论】:

      • 即使在将 setuptools 升级到 49.2.0 后,我也会遇到同样的错误
      • 是否将--clean 选项添加到PyInstaller buld 命令不能修复它?
      • 我刚刚重新运行了命令,现在它可以工作了,所以赞成答案。有关问题和解决方案的更多详细信息,请访问github.com/pypa/setuptools/issues/1963
      • 升级实际上添加了更多类似时尚的警告(获得更多警告并不是一件坏事) - pyinstaller 4.3、python 3.8、setuptools 57.0.0 -
      • PyInstaller 仍然希望必须显式添加 pkg_resources.py2_warn 但是,既然 setuptools 已将其删除,则无法找到它,因此您会收到无害的警告。 (实际上 PyInstaller 的大多数警告都是无害的。)
      【解决方案5】:

      在降级之前卸载 setuptools 提示: 部分功能可能会受到影响

      【讨论】:

        【解决方案6】:

        这是setuptools 的一个问题,如此 github ticket 中所述。考虑使用命令将您的setuptools 降级到 44.0 或更低版本

        pip install --upgrade 'setuptools<45.0.0'
        

        【讨论】:

        • 寻找@rfii 的答案。这是“正确”的做法
        猜你喜欢
        • 1970-01-01
        • 2017-11-28
        • 1970-01-01
        • 1970-01-01
        • 2019-06-17
        • 2018-07-01
        • 2016-09-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多