如何使用 PyInstaller 构建与 WSLg 一起使用的可执行文件

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

我正在制作一个基本应用程序,用于使用 matplotlib 图形可视化视频编码的 VMAF 报告。但是,我遇到了 PyInstaller 的问题。

似乎 PyInstaller 的工作方式是这样的,它没有正确打包正确的东西以使最终的可执行文件与 WSLg 兼容。有没有人以前遇到过这个问题并弄清楚如何让它工作?这不是 Python 代码的问题,因为如果我使用 python3 命令运行它,它会显示 matplotlib 图形,并且 WSLg 内置于我的 Windows 11 安装中。

我的大部分开发都使用 Ubuntu WSL,因此如果我必须切换到 PowerShell 来运行这个程序,那就太糟糕了。我正在尝试将其安装到 /usr/local/bin ,以便我可以随时无缝使用它,因此我正在使用 PyInstaller 构建可执行文件。

这里是 git 存储库,以防您需要查看任何内容。这是一个非常简单的程序,因此不需要解释它是如何工作的。

任何帮助将不胜感激。

干杯, 马修

python matplotlib pyinstaller windows-subsystem-for-linux windows-11
1个回答
0
投票

我意识到我从未发布过我遇到的异常:

我开始于:

用户警告:FigureCanvasAgg 是非交互式的,因此无法显示

然后安装一些东西后得到:

处理文件时出错:没有名为“PIL._tkinter_finder”的模块

好吧,我自己设法解决了:

首先,如果您遇到任何问题,请确保安装了所需的一切:

pip 安装 Pillow

或者如果您已经安装了它,请升级它

pip install --升级 Pillow

然后确保你也安装了 python3-tk

sudo apt-get install python3-tk

我正在使用自动生成的规范文件,所以对我来说,我只需要在 pyinstaller 命令中添加一些参数即可:

pyinstaller --onefile --hidden-import=PIL --hidden-import=PIL._tkinter_finder --hidden-import=tkinter "$(SOURCE_DIR)/$(MAIN_SCRIPT)" 

如果您自动生成规范文件,那么您只需修改规范文件的hiddenimports字段即可:

a = Analysis(
    ['../../src/vmaf-grapher.py'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=['PIL', 'PIL._tkinter_finder', 'tkinter'],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
)

瞧,您的可执行文件可以与 WSLg 一起使用。

您可以在此处查看 git 提交。

干杯, 马修

© www.soinside.com 2019 - 2024. All rights reserved.