Создание .exe файла с pyinstaller и движком Matlab - PullRequest
1 голос
/ 28 апреля 2020

Я подал заявку, используя pyqt. при запуске из IDE файлы .py работают хорошо. Однако при запуске файла .exe с помощью:

pyinstaller --name="Myapp" --windowed --onefile main.py

я получаю файл .exe. Когда я пытаюсь запустить его, он говорит:

Failed to execure script main

Я попытался еще раз, но на этот раз с:

pyinstaller main.py

Он сгенерировал папку с именем main в dist. Я запустил main.exe в командной строке и получил:

ImportError: No module named 'mlarray'

Я пошел в библиотеку matlab для python, которую я установил в \Python\Python36\Lib\site-packages\matlab, и изменил mlarray.py следующим образом:

from _internal.mlarray_sequence import _MLArrayMetaClass

Кому:

from matlab._internal.mlarray_sequence import _MLArrayMetaClass

Я даже изменил __init__.py: с:

from mlarray import double, single, uint8, int8, uint16, \
    int16, uint32, int32, uint64, int64, logical
from mlexceptions import ShapeError as ShapeError
from mlexceptions import SizeError as SizeError

на:

from matlab.mlarray import double, single, uint8, int8, uint16, \
    int16, uint32, int32, uint64, int64, logical
from matlab.mlexceptions import ShapeError as ShapeError
from matlab.mlexceptions import SizeError as SizeError

Наконец Я изменил Python\Python36\Lib\site-packages\matlab\_internal\mlarray_sequence.py с:

from _internal.mlarray_utils import _get_strides, _get_size, \
    _normalize_size, _get_mlsize, _reshape

на:

from matlab._internal.mlarray_utils import _get_strides, _get_size, \
    _normalize_size, _get_mlsize, _reshape

Сохранил всю работу и попробуйте снова сделать pyinstaller.

pyinstaller main.py

и на этот раз Я получаю следующую ошибку:

  File "site-packages\matlab\engine\__init__.py", line 62, in <module>
OSError: Please reinstall MATLAB Engine for Python or contact MathWorks Technical Support for assistance: [Errno 2] No such file or directory: 'C:\\pmafgx_das\\das2\\main\\ReleaserQt\\dist\\main\\matlab\\engine\\_arch.txt'
[2028] Failed to execute script main

Это очень расстраивает, и я не знаю, что делать дальше. Пожалуйста, если у вас есть понимание, я буду признателен, если вы поможете мне.

1 Ответ

0 голосов
/ 01 мая 2020

Прежде всего удалите изменения в matlab.

Затем создайте структуру каталогов - и файл hook-matlab.py - как в следующем дереве:

- script_to_compile.py  # This is the python file you run pyinstaller on
- hooks  # DIR
  - hook-matlab.py

И внутри hook-matlab.py:

from PyInstaller.utils.hooks import collect_all

datas, binaries, hiddenimports = collect_all('matlab')

Затем построить с дополнительной опцией --additional-hooks-dir=hooks.

...