Anaconda устанавливает Matlab Engine в Linux
Я пытаюсь установить Matlab Engine for Python
на CentOS 7 для Matlab R2016a с использованием anaconda python 3.4.
Я выполнил следующие команды:
source activate py34 # Default is python 3.5
python setup.py install
Выход:
running install
running build
running build_py
running install_lib
creating /root/.local/lib/python2.7/site-packages/matlab
creating /root/.local/lib/python2.7/site-packages/matlab/_internal
copying build/lib/matlab/_internal/mlarray_sequence.py -> /root/.local/lib/python2.7/site-packages/matlab/_internal
copying build/lib/matlab/_internal/__init__.py -> /root/.local/lib/python2.7/site-packages/matlab/_internal
copying build/lib/matlab/_internal/mlarray_utils.py -> /root/.local/lib/python2.7/site-packages/matlab/_internal
copying build/lib/matlab/mlarray.py -> /root/.local/lib/python2.7/site-packages/matlab
creating /root/.local/lib/python2.7/site-packages/matlab/engine
copying build/lib/matlab/engine/engineerror.py -> /root/.local/lib/python2.7/site-packages/matlab/engine
copying build/lib/matlab/engine/futureresult.py -> /root/.local/lib/python2.7/site-packages/matlab/engine
copying build/lib/matlab/engine/fevalfuture.py -> /root/.local/lib/python2.7/site-packages/matlab/engine
copying build/lib/matlab/engine/basefuture.py -> /root/.local/lib/python2.7/site-packages/matlab/engine
copying build/lib/matlab/engine/matlabengine.py -> /root/.local/lib/python2.7/site-packages/matlab/engine
copying build/lib/matlab/engine/__init__.py -> /root/.local/lib/python2.7/site-packages/matlab/engine
copying build/lib/matlab/engine/enginesession.py -> /root/.local/lib/python2.7/site-packages/matlab/engine
copying build/lib/matlab/engine/_arch.txt -> /root/.local/lib/python2.7/site-packages/matlab/engine
copying build/lib/matlab/engine/matlabfuture.py -> /root/.local/lib/python2.7/site-packages/matlab/engine
copying build/lib/matlab/mlexceptions.py -> /root/.local/lib/python2.7/site-packages/matlab
copying build/lib/matlab/__init__.py -> /root/.local/lib/python2.7/site-packages/matlab
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/_internal/mlarray_sequence.py to mlarray_sequence.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/_internal/__init__.py to __init__.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/_internal/mlarray_utils.py to mlarray_utils.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/mlarray.py to mlarray.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/engine/engineerror.py to engineerror.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/engine/futureresult.py to futureresult.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/engine/fevalfuture.py to fevalfuture.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/engine/basefuture.py to basefuture.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/engine/matlabengine.py to matlabengine.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/engine/__init__.py to __init__.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/engine/enginesession.py to enginesession.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/engine/matlabfuture.py to matlabfuture.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/mlexceptions.py to mlexceptions.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/__init__.py to __init__.pyc
running install_egg_info
Writing /root/.local/lib/python2.7/site-packages/matlabengineforpython-R2016a-py2.7.egg-info
Он каким-то образом устанавливает движок Matlab в системную версию Python, отличную от Anaconda py34
виртуальная среда Я заметил это на OSX, и он работает на моем Mac! Кто-нибудь может помочь с этим на CentOS?
4 ответа
cd "matlabroot\extern\engines\python"
python setup.py install --prefix="installdir"
Для Unix (OSX10) python2.7, используя Anaconda
cd /Applications/MATLAB_R2015a.app/extern/engines/python
python setup.py install --prefix="/Users/user/anaconda/"
Вот документ Matlab:
Просто напоминание для тех, у кого есть несколько виртуальных env в папке anacodna, после выполнения
python setup.py install --prefix="/Users/user/anaconda/"
как подсказывает @Leighton, пакет движка matlab фактически устанавливается в отдельной папке anacodna3/lib/python2.7/site-package/matlab, а не в обычном anaconda3/lib/python3.7/site-package. Поэтому вам нужно вручную переместить эту папку Matlab в папку пакета сайта, которую использует ваш python. Если у вас есть несколько виртуальных env, переместите их в соответствующую папку site-package того виртуального env, которое вы будете запускать.
После стольких пыток я, наконец, решил это простым способом. Вместо настройки системы на использование Py thon от Anaconda путем изменения.bash_profile, вы можете добавить альтернативу команде python:
sudo update-alternatives --install /usr/bin/python python ~/anaconda3/envs/py34/bin/python 2
update-alternatives --display python
cd /usr/local/MATLAB/R2016a/extern/engines/python/
sudo python setup.py install
Здесь я использую wsl ubuntu 20.04 в Windows 10, MATLAB R2021a и Pycharm.
- Создать среду conda
- Получите папку установки Matlab, набрав
matlabroot
в командном окне MATLAB.
`ans = /usr/local/MATLAB/R2021a`
Теперь все вводимые данные будут вводиться в оболочке Linux.
- Сменить каталог на matlabroot
(base) disusr@disusr:~$ cd /usr/local/MATLAB/R2021a
Проверьте все доступные conda env через
conda env list
.(база) :/usr/local/MATLAB/R2021a/extern/engines/python$ список env conda
base * /home/disusr/anaconda3 ext_env /home/disusr/anaconda3/envs/ext_env
- Обратите внимание на основание в скобках. Это указывает
base
env conda в настоящее время активирован.
- Активировать
ext_env
набрав
conda activate ext_env
Вы заметите в терминале, теперь он выглядит
(ext_env) :/usr/local/MATLAB/R2021a/extern/engines/python$
- Затем установите движок MATLAB, набрав
sudo python setup.py установить --prefix="/home/disusr/anaconda3/envs/ext_env/"
Обратите внимание на двойные кавычки, заключающие полное имя каталога conda. Двойная кавычка должна быть там.
conda info
должен указать полный путь к кондеenv
.
- Спасибо @talentcat за необходимость переместить папку .
В файловом менеджере перейдите в папку
/home/disusr/anaconda3/envs/ext_env/lib/python2.7/site-packages/
и разрезать папку,
затем перейдите в папку
/home/disusr/anaconda3/envs/ext_env/lib/python3.8/site-packages/
и вставьте папку
MATLAB
- Затем откройте графический интерфейс MATLAB, набрав
matlab
в скорлупе
(ext_env) [электронная почта защищена][электронная почта защищена][электронная почта защищена] :/usr/local/MATLAB/R2021a/extern/engines/python$ matlab
- В МАТЛАБ
Command Window
, типpyversion()
, который должен печатать
Пиверсия()
version: '3.8'
executable: '/home/disusr/anaconda3/envs/ext_env/bin/python'
library: '/home/disusr/anaconda3/envs/ext_env/lib/libpython3.8.so'
home: '/home/disusr/anaconda3/envs/ext_env'
isloaded: 0
- Потенциальная проблема
- Если вывод, как показано ниже
version: '' executable: '' library: '' home: '' isloaded: 0
a) Перезапустите MATLAB. b) Убедитесь, что при открытии MATLAB среда conda, в которой установлен механизм MATLAB, уже активирована. См. шаг (5). ИЛИ, чтобы проверить раздел
How to permanently activate the conda environment
.
***
Я не пробовал открывать MATLAB с помощью
symbolic links
будет подключать MATLAB-ENGINE или нет. Пожалуйста, прокомментируйте, если вам удастся выполнить это успешно.
Бонус:
Как навсегда активировать среду conda.
В терминале введите
nano .bashrc
Затем добавьте следующую строку
export PATH=”/home/disusr/anaconda3/bin":$PATH"
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/disusr/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/nu>
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/home/disusr/anaconda3/etc/profile.d/conda.sh" ]; then
. "/home/disusr/anaconda3/etc/profile.d/conda.sh"
else
export PATH="/home/disusr/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
source activate ext_env
Чтобы сохранить добавленную строку
ctl + x
а также
Y