#python #pyinstaller #oct2py
#python #pyinstaller #oct2py
Вопрос:
Я пытаюсь повторно использовать некоторый код octave (в файле 1 .m) в коротком скрипте python с использованием oct2py. Скрипт python корректно запускается с консоли cmd. Я даже могу упаковать его в exe-файл с помощью pyinstaller (без ошибок, только несколько предупреждений), но когда я запускаю его, исполняемый файл выдает эту ошибку и завершает работу:
---
C:UsersJasonDesktopOct2Py test>readFolder.exe
Traceback (most recent call last):
File "readFolder.py", line 2, in <module>
from oct2py import octave
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "c:python37libsite-packagesPyInstallerloaderpyimod03_importers.py", line 627, in exec_module
exec(bytecode, module.__dict__)
File "site-packagesoct2py__init__.py", line 26, in <module>
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "c:python37libsite-packagesPyInstallerloaderpyimod03_importers.py", line 627, in exec_module
exec(bytecode, module.__dict__)
File "site-packagesoct2pycore.py", line 14, in <module>
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "c:python37libsite-packagesPyInstallerloaderpyimod03_importers.py", line 627, in exec_module
exec(bytecode, module.__dict__)
File "site-packagesoctave_kernelkernel.py", line 49, in <module>
File "site-packagesoctave_kernelkernel.py", line 54, in OctaveKernel
File "site-packagesoctave_kernelkernel.py", line 43, in get_kernel_json
FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\toshiba\AppData\Local\Temp\_MEI94962\octave_kernel\kernel.json
[5220] Failed to execute script readFolder
У меня установлены последние версии python (3.7.1), oct2py (4.0.6), pyinstaller и т.д.
Такое ощущение, что я что-то упускаю или где-то здесь что-то не подключаю, кто-нибудь может мне с этим помочь? Спасибо!
Комментарии:
1. Решено! Мне нужно было установить переменную OCTAVE_KERNEL_JSON env.
2. не могли бы вы, пожалуйста, показать мне, как вы установили переменную env?
Ответ №1:
У меня была та же проблема, и, как сказал DNR, я решил установить переменную OCTAVE_KERNEL_JSON. Чтобы сделать это:
- Добавление файла kernel.json в качестве файла данных в файле спецификации, что объясняется здесьhttps://pyinstaller.readthedocs.io/en/v3.4/spec-files.html#adding-files-to-the-bundle.
Пример:
a = Analysis(...
datas=[ ('/home/user/miniconda3/envs/env/lib/python3.8/site-packages/octave_kernel/kernel.json', 'octave_kernel') ],
...
)
- Присваиваю новый путь kernel.json переменной env, добавив это в мой код перед импортом oct2py
if getattr(sys, 'frozen', False):
application_path = sys._MEIPASS
os.environ["OCTAVE_KERNEL_JSON"] = os.path.join(application_path, 'octave_kernel/kernel.json')