Я установил официальный 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, кстати
Короткий ответ: возникли две проблемы, которые необходимо было исправлять.
$LD_LIBRARY_PATH
должен не содержать путь к установке Anaconda. Добавление такого пути не рекомендуется в соответствии с документацией conda: https://conda.io/docs/building/shared-libraries.html, но некоторые пакеты могут так или иначе делать это, вызывая ошибку сегментации.Длинный ответ: полные инструкции по установке для использования MATLAB Engine с Anaconda
cd "/usr/local/MATLAB/R2017a/extern/engines/python"
sudo python3.5 setup.py install --prefix="/your_path_to_anaconda3/envs/your_env"
. На этом этапе вы должны иметь возможность import matlab
и matlab.engine
из Python вашей среды Anaconda, но в моем случае запуск двигателя дал ошибку сегментации.find /your_path_to_anaconda3/envs/your_env/ -name libpython*
. В моем случае это вернулось:
sudo ln -s /your_path_to_anaconda3/envs/your_env/lib/libpython3.5m.dylib /usr/lib
. Обратите внимание, что вы можете иметь только одну ссылку под названием libpython3.5m.dylib в /usr/lib. Поэтому, если у вас есть несколько сред Anaconda, использующих ту же версию Python, вам нужно только установить эту ссылку один раз в зависимости от того, какой из них. Помните, что не удалять эту среду, так как это нарушит связь для всех других окружений, полагающихся на нее.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 (пока не заметив плохого эффекты).