Pyinstaller没有构建cairo.上下文正确



注意:我已经编辑了此描述和标题,以便在调试过程中包含新信息。

我有一个python应用程序,需要转换为可执行文件。该应用程序使用python-gi-cairo包等绘制图形。

以下是启动应用程序后终端窗口中的错误消息:

TypeError: Couldn't find foreign struct converter for 'cairo.Context'

我已经单独发布了关于制作一个可以测试pyinstaller参数的最小绘图应用程序的内容。以下是该帖子的链接:

https://stackoverflow.com/questions/73981704/missing-dependency-after-running-pyinstaller?noredirect=1#comment130629339_73981704

这是evms.spec文件:

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None

a = Analysis(
['evms.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=['matplotlib', 'python-gi-cairo'],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='evms',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)

原来缺少一个import语句(import-cairo(,添加该语句后,pyinstaller能够构建一个运行良好的可执行文件。我不知道为什么.py版本的应用程序在没有导入的情况下可以工作。

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk as gtk
from gi.repository import Gdk as gdk
import cairo
from gi.repository import GLib

最新更新