我正在尝试从虚拟环境中调用macOS上为Python打包的MATLAB软件包。
要在macOS上使用MATLAB运行时,请同时使用DYLD_LIBRARY_PATH
must be updated to point to the MATLAB Runtime和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}"
然后创建并激活Python虚拟环境:
$ python3.6 -m venv py36
$ source py36/bin/activate
接下来将MATLAB packaged for Python application安装到虚拟环境中:
(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
现在尝试运行在虚拟环境中导入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.
问题是,据我所知,mwpython
不能在虚拟环境中使用。有办法解决这个问题吗?当前,我们正在努力打造可重复的环境,因为mwpython
似乎在硬编码要全局安装的所有内容。
经过测试:
答案 0 :(得分:1)
激活脚本会取消设置PYTHONHOME并设置VIRTUAL_ENV,这是虚拟环境的文件夹路径。 mwpython将使用PYTHONHOME指向的python解释器(当然,假设它是受支持的版本)。因此,您只需要在调用mwpython之前将PYTHONHOME设置并导出到VIRTUAL_ENV,例如
python3.6 -m venv py36
source py36/bin/activate
export PYTHONHOME=$VIRTUAL_ENV
mwpython matlab_test.py