PyInstaller未能包含来自C:\ Python27 \ Lib的一些模块

时间:2014-02-28 19:47:28

标签: python import pyinstaller

我一直在反复制作Tkinter实用程序的PyInstaller可执行程序,今天早上突然出现的可执行文件失败,C:\ Python27 \ Lib中的模块出现“无法导入”错误,例如“timeit”和“bisect”。

脚本可以自行运行。只有可执行文件有问题。

任何可能改变导致此行为的想法?或者如何强制修复?

[编辑]以下是可执行文件报告的具体错误:

Traceback (most recent call last):
  File "<string>", line 35, in <module>
  File "../..\utils\InterpolatedArray.py", line 12, in <module>
    import bisect
ImportError: No module named bisect

当我评论出使用这个模块(绕过bisect的导入)时,接下来导致timeit导致失败。运行脚本本身时不会发生这些错误。

[EDIT2] Pyinstaller创建它需要的目录(./build和./dist),并且没有权限问题。 pyinstaller构建完成且没有错误。

[EDIT3]这是我正在使用的构建命令:

pyinstaller -F MyMainModule.py

3 个答案:

答案 0 :(得分:9)

找到修复,如果不是原因。这是我更新的构建线:

pyinstaller --hidden-import=timeit --hidden-import=bisect -F MyMainModule.py

仍然不确定为什么PyInstaller突然忘记了如何在构建中正确包含的20多个其他模块中找到这两个模块(以及 这两个模块)。

答案 1 :(得分:4)

在打包导入openpyxl的Python脚本时遇到类似问题。这是我的解决方案。

第1步:安装python模块,openpyxl

$ wine python.exe Scripts/pip.exe install openpyxl

第2步:添加openpyxl路径

openpyxl路径(~/.wine/drive_c/Python27/Lib/site-packages)附加到应用程序规范文件中的pathex对象中的Analysis(例如ProcessSpreadsheet.spec)。

a = Analysis(['ProcessSpreadsheet.py'],
             pathex=['C:\\Python27\\Scripts', '~/.wine/drive_c/Python27/Lib/site-packages'],
             binaries=None,
             datas=None,
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)

第3步:重建

$ wine pyinstaller.exe ProcessSpreadsheet.spec

有关详细说明,请参阅here

答案 2 :(得分:0)

对于UNIX / Linux用户,请确保在编译时与应用程序一样引用相同的软件包。使用虚拟环境时,主要会发生此问题。为此,找出安装的软件包文件夹并编辑myapp.spec。 然后运行

pyinstaller myapp.spec