Упаковка Python с зависимостями SWI-PrologPython

Программы на Python
Ответить
Anonymous
 Упаковка Python с зависимостями SWI-Prolog

Сообщение Anonymous »

В проекте Python, который использует pyswip для установления соединения с SWI-Prolog, можно ли создать для этого проекта исполняемый файл.exe, чтобы его можно было запускать на других компьютерах без необходимости устанавливать на них SWI-Prolog?
Тем не менее, я работаю над проектом, в котором мне нужно установить соединение между Python и Prolog через pyswip, который представляет собой графический интерфейс с tkinter, где на основе данных вводится определенный генерируется запрос для выполнения по базе знаний, что-то так сказать простое, но при создании исполняемого файла и запуске его на другом компьютере выдает ошибку.
Пытаюсь создать исполняемый файл с помощью команды

Код: Выделить всё

pyinstaller --onefile --windowed --clean --hidden-import=pyswip --add-data "data/*;data" --add-data "swi-prolog/*;swi-prolog" --icon="data/icon_steel.ico" gui.py
В каталоге «data» находится база знаний и другие элементы, необходимые для интерфейса, а каталог «swi-prolog» соответствует портативной версии swi-prolog, которая находится в PortableApps.
В скрипте Python реализованы следующие строки для временного создания переменных среды, связанных с каталогом swi-prolog внутри проекта
`
из tkinter import Tk, Toplevel, Canvas, Entry, Кнопка, PhotoImage, окно сообщения, метка
из pathlib import Path
из pyswip import Prolog
import re, os, sys

Код: Выделить всё

if getattr(sys, 'frozen', False):
# El script está ejecutándose en un .exe
base_path = sys._MEIPASS
else:
# El script se está ejecutando de manera normal
base_path = os.path.dirname(os.path.abspath(__file__))

swi_prolog_path = base_path / 'swi-Prolog' / 'App' / 'SWI-Prolog'
os.environ['SWI_HOME_DIR'] = str(swi_prolog_path)
os.environ['PATH'] = str(swi_prolog_path / 'bin') + os.pathsep + os.environ['PATH']

# Direccionamiento de rutas
conocimientos_path = os.path.join(base_path, 'data', 'conocimientos.pl')
...`
Я сократил код скрипта, так как следующие строки соответствуют дизайну интерфейса.
После создания исполняемого файла проекта и попытки запустить его на другом компьютере, где не установлены Python и swi-prolog, возникает следующая ошибка:

Код: Выделить всё

    Traceback (most recent call last):
File "gui.py", line 3, in 
File "", line 1178, in _find_and_load
File "", line 1149, in _find_and_load_unlocked
File "", line 690, in _load_unlocked
File "PyInstaller\loader\pyimod02_importers.py", line 384, in exec_module
File "pyswip\__init__.py", line 29, in 
File "", line 1178, in _find_and_load
File "", line 1149, in _find_and_load_unlocked
File "", line 690, in _load_unlocked
File "PyInstaller\loader\pyimod02_importers.py", line 384, in exec_module
File "pyswip\prolog.py", line 26, in 
File "", line 1178, in _find_and_load
File "", line 1149, in _find_and_load_unlocked
File "", line 690, in _load_unlocked
File "PyInstaller\loader\pyimod02_importers.py", line 384, in exec_module
File "pyswip\core.py", line 510, in 
File "pyswip\core.py", line 358, in _find_swipl
File "pyswip\core.py", line 194, in _find_swipl_windows
pyswip.core.SwiPrologNotFoundError: SWI-Prolog not found
[PYI-484:ERROR] Failed to execute script 'gui' due to unhandled exception!
Итак, есть ли какой-нибудь способ создать исполняемый файл, чтобы его можно было запускать в других местах без необходимости установки swi-prolog?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»