我一直在反复制作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
答案 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