Pyinstaller | Extrected Exe无法找到子模块

时间:2017-05-02 11:00:49

标签: python-2.7 python-import pyinstaller

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

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

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

    Problem Image附在此处。 任何帮助将不胜感激。

  5. 此致 Sunay Shah

1 个答案:

答案 0 :(得分:0)

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

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

在我的问题分析期间,我发现在分析阶段我没有导入我的某些包。我开始知道挖掘我们需要将这些包包含在数据文件中。所以我将几乎所有需要的软件包复制到.spec文件的数据部分。仍然存在问题。我稍微挖掘一下,发现尽管工件被打包,但在执行过程中无法导入。

我经历了一些更详细的细节,发现问题是在运行时期间某些模块无法通过PyInstaller导入。我发现可以在hidden-imports的帮助下解决问题。我在hidden-import部分添加了缺少的模块,解决了这个问题。

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

希望这有助于某人解决问题。

此致 Sunay Shah