首页 > 解决方案 > pyinstaller 不能包含包

问题描述

我在虚拟环境中运行 python 2.7,在该环境中运行 pip freeze 在激活它后返回

future==0.17.1
lz4==2.1.6
pyparsing==2.3.1
PyQt4 @ file:///C:/.../PyQt4-4.11.4-cp27-cp27m-win_amd64.whl
xlrd==1.2.0

如果我在激活的虚拟环境中运行python并导入lz4,则导入成功。

但是,当我尝试使用不带 pyinstaller(3.6 版本)--windowed的可执行文件时,从 cmd 运行 exe 文件会给出ImportError: No module named lz4.

所以我猜出于某种原因 pyinstaller 不能包含特定的包。

我已经尝试添加运行 pyinstaller 命令--hidden-import=lz4, --paths="path_folder_to_lz4_inside_virtualenv", 包括hiddenimports=['lz4'],在文件上并在文件而不是文件.spec上运行 pyinstaller 命令(以及在文件上),包括.spec.py.py

from PyInstaller.utils.hooks import collect_submodules

hidden_imports = collect_submodules('lz4')

.spec两者上运行 pyinstaller 命令.spec.py但 ImportError 仍然存在。

我的机器有 Windows 10。请注意,这是从另一台机器克隆的虚拟环境,其中 pyinstaller 命令运行没有任何问题,唯一的区别是我有 Windows 7,PyQt 没有安装轮文件,而是复制 PyQt4 文件夹和sip.pyd 从基础安装到环境包文件夹。

有什么建议么?

标签: pythonpyinstaller

解决方案


好的解决方案,以防有人遇到同样的问题。

在以前的机器上,如果没有问题,pyinstaller 命令从 python 2.7 的主要 python 安装运行 pyinstaller。(虚拟环境没有安装pyinstaller)

在机器上的问题是,pyinstaller 安装在主安装(python 3)和一个单独的 virualenv 中,主安装 python 2.7,我从这个 python 2.7 安装运行 pyinstaller。

现在我在 virtualenv 上为这个特定的应用程序安装了 pyinstaller,我从那里运行了 pyinstaller 命令,它工作了。


推荐阅读