最近做python调用MATLAB的函数遇到了一个很奇怪的bug,
原程序如下:
import numpy as np
import matlab.engine
eng = matlab.engine.connect_matlab()
在pycharm运行会报下面的错误
Traceback (most recent call last):
File "C:\Users\10025\AppData\Local\Programs\Python\Python37\lib\site-packages\matlab\engine\__init__.py", line 45, in <module>
pythonengine = importlib.import_module("matlabengineforpython"+_PYTHONVERSION)
File "C:\Users\10025\AppData\Local\Programs\Python\Python37\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'matlabengineforpython3_7'
可以发现是在运行import matlab.engine
的时候报的错,然而奇怪的是在cmd模式下运行这一句代码不会报错,并且MATLAB函数也能正常使用。调试了好久才无意中发现原因在于import matlab.engine
这一句话写的位置,它应该写在第一行,也就是应该这样写
import matlab.engine
import numpy as np
eng = matlab.engine.connect_matlab()
这样程序就能正常运行了。
又调了一下程序发现,写成这样也是可以运行的
import sys
import matlab.engine
eng = matlab.engine.connect_matlab()
看起来好像是import matlab.engine
前面导入的如果是某些python内置的模块的话能运行,但是我又发现这样写也会报错
import random
import matlab.engine
eng = matlab.engine.connect_matlab()
也就是说只有部分内置的模块在matlab.engine
前面导入是可以运行的。