Упаковка 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
p>
В скрипте Python были реализованы следующие строки для временного создания переменных среды, связанных с каталогом swi-prolog внутри проекта
`
из tkinter import Tk, Toplevel, Canvas, Entry, Button, PhotoImage, messagebox, Label
из 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?

Подробнее здесь: https://stackoverflow.com/questions/791 ... pendencies
Ответить

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

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

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

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

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