问题
我尝试使用 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 内,也安装在全局
from PyInstaller.utils.hooks import collect_submodules
hiddenimports = collect_submodules('tkinter')
然后,在运行 PyInstaller 时使用 --additional-hooks-dir 选项指定此目录