安装程序 |提取的 Exe 无法找到子模块

Pyinstaller | Extrected Exe unable to find sub module

我是 Python 的新人。当前使用 Python 2.7。作为当前的练习,我正在通过 PyInstaller 将 Python 脚本转换为 exe 文件。我发现通过生成的 exe 查找某些模块时遇到了麻烦,这些模块在我 运行 通过 Python 脚本时工作得很好。

我已经通过 PyInstaller 中的 --onefile 选项创建了 exe。作为练习的一部分,我已经做了以下几点,

  1. 已验证 python 文件存在于特定位置(临时位置),包括 python 已编译文件。
  2. 我更新了 sys.path 个条目以在特定(临时)位置找到 python。
  3. 我还验证了 imp.findModules 能够找到模块,但是 imp.loadModule 无法加载模块,而 运行 通过 exe 文件。
  4. 请注意,当我从命令行 运行 python 文件时它工作正常,它只在我创建 exe 文件时出错。

    Problem Image附在这里。 如有任何帮助,我们将不胜感激。

此致, 苏奈莎

我看到很多人都面临这个问题。我解决了这个问题,以下是相同的解决方案。

在 PyInstaller 的帮助下打包期间,我发现 PyInstaller 正在分析给定的 python 文件并导入它在分析阶段找到的包本身。在PyInstaller创建的build文件夹中可以看到打包时发现哪些包会被压缩(out00-Analysis.toc,out00-PKG.toc,out00-PYZ.toc,out01- Tree.toc,warnXXX.txt 文件 ) 是要查看的重要文件。

在我的问题分析过程中,我发现我的某些包在分析阶段没有导入。我在挖掘中了解到我们需要将这些包包含在数据文件中。所以我将几乎所有需要的包复制到 .spec 文件的数据部分。问题仍然存在。我再深入一点,发现虽然工件已打包,但它们无法在执行期间导入。

我仔细查看了一些细节,发现问题是在运行时某些模块无法通过 PyInstaller 导入。我发现这个问题可以在隐藏导入的帮助下解决。我在隐藏导入部分添加了缺失的模块,解决了这个问题。

长话短说,以下是解决我的问题的关键 1.使用默认选项创建一个构建,解决你所有的问题 2. 将 PyInstaller 未找到的所有必需模块包含到带有数据的构建部分。 3. 添加 Pyinstaller 未导入的隐藏导入。 (例如,如果 abc.contrib.usages 模块在运行时未加载,请将其添加到 hidendiports 部分。 4. 一旦创建的 exe 使用默认选项使用 --onefile 来创建构建。 5. 解决问题的最佳方法是在构建过程中分析构建文件夹中创建的所有文件。

希望这会帮助一些人解决那里的问题。

此致, 苏奈沙