虚拟环境中的 PyInstaller + Tkinter - 无法在 python 3.8 中构建可执行文件

问题描述 投票:0回答:1

问题

我尝试使用 PyInstaller 构建可执行文件。 这里提出了一个非常相似的问题。

我正在 Windows 计算机上的 WSL 终端执行此操作。我创建了一个虚拟环境来减少可执行文件中导入的包数量。目前我的脚本使用 pandas、requests 和 tkinter。

我在我的环境中通过 pip 安装了所有必需的软件包。并使用以下命令运行 PyInstaller(已尝试上述问题的解决方案):

sudo pyinstaller --onefile --hidden-import=tkinter search_ucdp.py

如果有人问我这个问题,我按如下方式安装了 tkinter:

sudo pip install tk

我的问题是,无论我如何尝试,我都无法运行可执行文件。它给我以下错误,表明未找到 tkinter 模块/库:

Traceback (most recent call last):
File "[myscript].py", line 2, in <module>
ModuleNotFoundError: No module named 'tkinter'
[26040] Failed to execute script '[my_script]' due to unhandled exception!

我发现的另一件奇怪的事情是,可执行文件是在没有 .exe 的情况下生成的(但我的猜测是因为它是在 Linux 环境中生成的(?))。

该文件被识别为可执行文件,如果我在虚拟环境之外生成它,它就可以工作。但为什么在这里不起作用?

我尝试过的:

  • 我尝试使用 pyinstaller 的 --hidden-import 尝试“tk”和“tkinter”,但这会导致相同的错误

  • 我也尝试修改pip语句(与上面相同)

  • 与此问题相关 -> PyInstaller 既安装在 venv 内,也安装在全局

python-3.x tkinter virtualenv pyinstaller executable
1个回答
0
投票
  • 无法重现该错误,但您提到使用 --additional-hooks-dir:有时 PyInstaller 可能无法自动检测所有必要的导入。您可以尝试提供额外的钩子来帮助 PyInstaller 找到 tkinter 模块。创建一个目录(例如 hooks)并在其中创建一个名为 hook-tkinter.py 的文件,其中包含以下内容:
from PyInstaller.utils.hooks import collect_submodules

hiddenimports = collect_submodules('tkinter')

然后,在运行 PyInstaller 时使用 --additional-hooks-dir 选项指定此目录

  • 另请参阅@phd的评论
© www.soinside.com 2019 - 2024. All rights reserved.