PYSWIP 无法在 pyinstaller 可执行文件中工作

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

我用 TKINKTER 和 PYSWIP 用 python 和 prolog 完成了一个项目。当使用“pyinstaller -w --onefile main.py”创建可执行文件时,它给我一个错误,因为它没有使用 PYSWIP 库。如何将此包导入到我的可执行文件中?注意:Pyswip是通过pip安装的

[enter image description here1

python prolog pyinstaller
1个回答
0
投票

我也遇到了同样的问题,我发现这是用pyinstaller打包在里面的libswipl.dll。删除 .spec 文件中的 .dll 并从该 .spec 生成新的可执行文件似乎可以解决该问题。

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


a = Analysis(
    ['Your Python Application Filepath'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
    optimize=0,
)
pyz = PYZ(a.pure)

a.binaries = a.binaries - TOC([('libswipl.dll', None, None)])

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name='Your Python Application Name',
    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,
)

请注意,我刚刚添加了

a.binaries = a.binaries - TOC([('libswipl.dll', None, None)])

排除该 .dll

这似乎有效,因为 pyswip 搜索 swipl 的默认位置(这似乎已经更改,因为它应该是 swipl/ 而不是 pl/),然后搜索系统路径,在 %APPDATA%/Local/Temp 中找到 Temp 文件夹以及为您创建的可执行文件分配的文件夹,其中可以找到 .dll,但没有其他任何内容。通过排除这一点,您需要在运行可执行文件的设备上安装 swipl。

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