我用 TKINKTER 和 PYSWIP 用 python 和 prolog 完成了一个项目。当使用“pyinstaller -w --onefile main.py”创建可执行文件时,它给我一个错误,因为它没有使用 PYSWIP 库。如何将此包导入到我的可执行文件中?注意:Pyswip是通过pip安装的
[1
我也遇到了同样的问题,我发现这是用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。