Запуск двигателя Matlab в виртуальной среде Anaconda возвращает «Ошибка сегментации (ядро сброшено)»

1

Я установил официальный MATLAB Engine, следуя инструкциям из ответа на Anaconda, установить Matlab Engine в Linux в виртуальную среду Anaconda с Python3.5. Теперь я могу импортировать matlab и matlab.engine без ошибок. Однако, когда я пытаюсь: matlab.engine.start_matlab(), я получаю "Ошибка сегментации (сбрасывание ядра)"

Я попытался установить LD_LIBRARY_PATH из среды conda (в случае, если это даже актуально): export LD_LIBRARY_PATH=/System/Library/Frameworks/Python.framework/Versions/Current/lib:$LD_LIBRARY_PATH, но безрезультатно. Путь не существует, насколько я знаю, поэтому я также попробовал export DYLD_LIBRARY_PATH=path_to_anaconda3/envs/myEnv/lib:$LD_LIBRARY_PATH

Итак, как я могу запустить скрипт Matlab/вызвать скрипты Matlab из Python из виртуальной среды Anaconda?

Я на Ubuntu, кстати

  • 0
    Все указанные вами значения выглядят как для OSX (не для Linux). Вы уверены, что прочитали правильные инструкции?
  • 0
    Да, я тоже заметил, что многие, кто получает эту ошибку, находятся на OSX, но я решил, что стоит попробовать то, что они сделали - слишком плохо, что это не сработало ...
Теги:
python-3.x
anaconda
matlab-engine

1 ответ

0
Лучший ответ

Короткий ответ: возникли две проблемы, которые необходимо было исправлять.

  • $LD_LIBRARY_PATH должен не содержать путь к установке Anaconda. Добавление такого пути не рекомендуется в соответствии с документацией conda: https://conda.io/docs/building/shared-libraries.html, но некоторые пакеты могут так или иначе делать это, вызывая ошибку сегментации.
  • Символьная ссылка необходима из файла libpythonXXX.dylib нужной версии в /usr/lib/, так что MATLAB может найти правильный Python

Длинный ответ: полные инструкции по установке для использования MATLAB Engine с Anaconda

  • Установите версию MATLAB, которая поддерживает Python, который вы хотите использовать. Убедитесь, что эта конкретная установка MATLAB активирована.
  • Откройте терминал и перейдите в папку, содержащую механизм Python установки MATLAB: cd "/usr/local/MATLAB/R2017a/extern/engines/python"
  • Запустите setup.py с версией Python, которую вы хотите использовать, и префикс местоположения среды Anaconda: sudo python3.5 setup.py install --prefix="/your_path_to_anaconda3/envs/your_env". На этом этапе вы должны иметь возможность import matlab и matlab.engine из Python вашей среды Anaconda, но в моем случае запуск двигателя дал ошибку сегментации.
  • Найдите файл libpython нужной версии. Ваша среда Anaconda должна содержать ее: find /your_path_to_anaconda3/envs/your_env/ -name libpython*. В моем случае это вернулось:
    • /.../Lib/libpython3.so
    • /.../Library/python3.5/конфигурации-3.5м/libpython3.5m.a
    • /.../Lib/libpython3.5m.so.1.0
    • /.../Lib/libpython3.5m.so
  • Как я хотел использовать его с python 3.5, я пошел с libpython3.5m (я не знаю, почему существует "m" ). Сделайте символическую ссылку из .dylib-версии этого файла в /usr/lib: sudo ln -s /your_path_to_anaconda3/envs/your_env/lib/libpython3.5m.dylib /usr/lib. Обратите внимание, что вы можете иметь только одну ссылку под названием libpython3.5m.dylib в /usr/lib. Поэтому, если у вас есть несколько сред Anaconda, использующих ту же версию Python, вам нужно только установить эту ссылку один раз в зависимости от того, какой из них. Помните, что не удалять эту среду, так как это нарушит связь для всех других окружений, полагающихся на нее.
  • Запустите новый терминал (!) и активируйте среду Anaconda: source activate your_env. Проверьте в своей среде Anaconda, есть ли LD_LIBRARY_PATH ссылки на среду Anaconda echo $LD_LIBRARY_PATH. Если это так, убедитесь, что оно больше не работает: export LD_LIBRARY_PATH=only_paths_you_do_want_to_keep_separated_by_a_colon. Это действие экспорта необходимо повторять всякий раз, когда вы активируете среду Anaconda, поэтому вы можете захотеть взглянуть на более постоянные средства ее настройки. Однако в моем случае (помимо того, что я сам добавлял его в надежде, что это улучшит ситуацию), путь был фактически добавлен pygpu, поэтому я закончил сброс LD_LIBRARY_PATH из моего python script (пока не заметив плохого эффекты).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню