我正在制作一个基本应用程序,用于使用 matplotlib 图形可视化视频编码的 VMAF 报告。但是,我遇到了 PyInstaller 的问题。
似乎 PyInstaller 的工作方式是这样的,它没有正确打包正确的东西以使最终的可执行文件与 WSLg 兼容。有没有人以前遇到过这个问题并弄清楚如何让它工作?这不是 Python 代码的问题,因为如果我使用 python3 命令运行它,它会显示 matplotlib 图形,并且 WSLg 内置于我的 Windows 11 安装中。
我的大部分开发都使用 Ubuntu WSL,因此如果我必须切换到 PowerShell 来运行这个程序,那就太糟糕了。我正在尝试将其安装到 /usr/local/bin ,以便我可以随时无缝使用它,因此我正在使用 PyInstaller 构建可执行文件。
这里是 git 存储库,以防您需要查看任何内容。这是一个非常简单的程序,因此不需要解释它是如何工作的。
任何帮助将不胜感激。
干杯, 马修
我意识到我从未发布过我遇到的异常:
我开始于:
用户警告: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 提交。
干杯, 马修