Pyinstaller错误 - "找不到setuptools发布"

Jay*_*ash 6 python pyinstaller

尝试使用Pyinstaller为我的python项目构建可执行二进制文件.

环境细节:

Python - 2.7.6,pip - 6.1.1,setuptools - 21.2.1

我能够成功构建项目.

pyinstaller heatstackapp.py
......
......
83093 INFO: checking COLLECT
83093 INFO: Building COLLECT because out00-COLLECT.toc is non existent
83094 INFO: Building COLLECT out00-COLLECT.toc
jayaprakash@cloudenablers:/opt/core/heatstack/heatstack$
Run Code Online (Sandbox Code Playgroud)

而当我执行二进制文件时,它会抛出错误消息.

jayaprakash@cloudenablers:/opt/core/heatstack/heatstack$     ./dist/heatstackapp/heatstackapp 
......
......
      File "pbr/packaging.py", line 31, in <module>
      File "/usr/local/lib/python2.7/dist-packages/PyInstaller/loader/pyimod03_importers.py", line 389, in load_module
        exec(bytecode, module.__dict__)
      File "setuptools/command/develop.py", line 11, in <module>
      File "/usr/local/lib/python2.7/dist-packages/PyInstaller/loader/pyimod03_importers.py", line 389, in load_module
        exec(bytecode, module.__dict__)
      File "setuptools/command/easy_install.py", line 53, in <module>
      File "/usr/local/lib/python2.7/dist-packages/PyInstaller/loader/pyimod03_importers.py", line 389, in load_module
        exec(bytecode, module.__dict__)
      File "setuptools/package_index.py", line 206, in <module>
      File "pkg_resources/__init__.py", line 943, in require
      File "pkg_resources/__init__.py", line 829, in resolve
    pkg_resources.DistributionNotFound: The 'setuptools' distribution was not found and is required by the application
    Failed to execute script heatstackapp
Run Code Online (Sandbox Code Playgroud)

任何帮助都会非常明显.提前致谢.

Lig*_*tCC 1

.exe这是因为PyInstaller未将一个包或一组文件包含在最终文件中。当 PyInstaller 无法自动检测所需的模块或非脚本的额外数据文件(因此不是导入和依赖项链的一部分)时,就会发生这种情况。

我无法从所提供的信息中得知更多信息,但可以给出一些要采取的一般步骤。


更新.spec文件并在其上运行 PyInstaller,而不是您的.py文件。

当您对.py文件运行 PyInstaller 时,.spec将首先创建一个文件,然后 PyInstaller 将从该.exe文件生成.spec.

运行 PyInstaller 一次后,您可以.spec手动编辑文件以包含 PyInstaller 无法自行找到的其他“隐藏”导入和直接资源/数据文件(如图像、元数据文件等)。

手动更新.spec文件后,不要.py再在该文件上运行 PyInstaller。相反,直接在.spec文件上运行它,它将.exe使用您手动指定的额外资源来构建。

另请参阅此答案,了解与 PyInstaller 捆绑在一起的实用程序,该实用程序可以.spec为不同情况创建文件

将数据文件添加到.spec文件中

在规范文件中,有一行datas =可以以非常特定的格式进行更新,以包含单个文件或整个文件夹及其内容。

隐藏进口

如果 PyInstaller 缺少一些所需的导入(通常是因为特定包正在使用某种隐式的非标准方法来管理其一个或多个依赖项),您可以告诉 PyInstaller 在文件中.spec无论如何都包含它。

请参阅有关隐藏导入的 PyInstaller 文档