[英]How to call MATLAB library from Python virtual environment on Mac
I am trying to call a MATLAB package packaged for Python on macOS from a virtual environment.我正在尝试从虚拟环境中调用为 macOS 上的 Python 打包的 MATLAB 包。
In order to use the MATLAB runtime on macOS, the DYLD_LIBRARY_PATH
must be updated to point to the MATLAB Runtime as well as libpython3.6.dylib
.为了在 macOS 上使用 MATLAB 运行时, 必须更新DYLD_LIBRARY_PATH
以指向 MATLAB 运行时以及libpython3.6.dylib
。
export DYLD_LIBRARY_PATH="/Applications/MATLAB/MATLAB_Runtime/v95/runtime/maci64:/Applications/MATLAB/MATLAB_Runtime/v95/sys/os/maci64:/Applications/MATLAB/MATLAB_Runtime/v95/bin/maci64:/Library/Frameworks/Python.framework/Versions/3.6/lib:${DYLD_LIBRARY_PATH}"
Then create and activate a Python virtual environment:然后创建并激活一个 Python 虚拟环境:
$ python3.6 -m venv py36
$ source py36/bin/activate
Next install the MATLAB packaged for Python application into the virtual environment:接下来将为 Python 应用程序打包的MATLAB安装到虚拟环境中:
(py36) $ cd /Applications/my_matlab_app/application
(py36) $ python setup.py install
(py36) $ pip list
Package Version
---------------------- -------
matlabruntimeforpython R2018b
pip 18.1
setuptools 40.6.2
Now attempt to run a script that imports your MATLAB library within the virtual environment:现在尝试运行一个脚本,在虚拟环境中导入您的 MATLAB 库:
(py36) $ python matlab_test.py
Exception caught during initialization of Python interface. Details: On the Mac, use 'mwpython' rather than 'python' to start a script or session that will call deployed MATLAB code from Python.
Traceback (most recent call last):
File "matlab_test.py", line 26, in <module>
import my_matlab_app
File "/Users/user/venv/py36/lib/python3.6/site-packages/my_matlab_app/__init__.py", line 283, in <module>
_pir.import_cppext()
File "/Users/user/venv/py36/lib/python3.6/site-packages/my_matlab_app/__init__.py", line 276, in import_cppext
self.cppext_handle = importlib.import_module("matlabruntimeforpython" + self.interpreter_version)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
RuntimeError: On the Mac, use 'mwpython' rather than 'python' to start a script or session that will call deployed MATLAB code from Python.
The problem is that as far as I can tell, mwpython
can't be used within virtual environments.问题是,据我所知, mwpython
不能在虚拟环境中使用。 Is there a way to work around this?有没有办法解决这个问题? We're currently struggling making repeatable environments because mwpython
seems to hard code everything to be globally installed.我们目前正在努力制作可重复的环境,因为mwpython
似乎对所有内容进行了硬编码以进行全局安装。
Tested on:测试:
The activate script unsets PYTHONHOME and sets VIRTUAL_ENV, which is the folder path to your virtual environment. activate 脚本取消设置 PYTHONHOME 并设置 VIRTUAL_ENV,它是您的虚拟环境的文件夹路径。 mwpython will use the python interpreter pointed to by PYTHONHOME (assuming it is a supported version, of course). mwpython 将使用 PYTHONHOME 指向的 python 解释器(当然,假设它是受支持的版本)。 So, you merely need to set and export PYTHONHOME to VIRTUAL_ENV before calling mwpython, eg因此,您只需要在调用 mwpython 之前设置并导出 PYTHONHOME 到 VIRTUAL_ENV,例如
python3.6 -m venv py36
source py36/bin/activate
export PYTHONHOME=$VIRTUAL_ENV
mwpython matlab_test.py
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.