importlib.reload(matlab.engine) is not working
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hey,
I try to switch the python engine version in one single class. I added here a small example. Based on the used matlab version I want do add matlab.engine version dynamically. I tested many ways - importlib.reload(<matlabVersion>) is not working. What is the best way
import sys
import re
import importlib
matlab2017a ="d:\CodeArea\ModelQualityInterface\core\Tools\MatlabSimulink\matlab17aPy35\Lib\site-packages"
matlab2016b ="d:\CodeArea\ModelQualityInterface\core\Tools\MatlabSimulink\matlab16bPy35\Lib\site-packages"
sys.path.append(matlab2016b)
import matlab.engine
print(matlab.__file__)
print(matlab.engine.find_matlab())
def __RemoveMatlabEngineFromSysPath__(deliveredLibs):
for p in sys.path:
if p.find(deliveredLibs) != -1:
sys.path.remove(p)
__RemoveMatlabEngineFromSysPath__(matlab2016b)
sys.path.append(matlab2017a)
matlab = importlib.reload(matlab.engine)
print(matlab.engine.__file__)
print(matlab.engine.find_matlab())
Output:
File "d:/CodeArea/ModelQualityInterface/core/Tools/MatlabSimulink/test_multipleMatlabVersions.py", line 31, in <module>MatlabSimulink/test_multipleMatlabVersions.py", line
31, in <module> t__.py", line 166, in reload
matlab = importlib.reload(matlab.engine)
File "c:\Program Files\Python35\lib\importlib\__ini_exect__.py", line 166, in reload 697, in exec_module
_bootstrap._exec(spec, module) _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 626, in MatlabSimulink\matlab16bPy35\Lib\site-packages\matlab\engine\__init__.py", line 80, in <module>
_exec
File "<frozen importlib._bootstrap_external>", lineMatlabSimulink\matlab16bPy35\Lib\site-packages\matlab\engine\enginesession.py", line 8, in __init__ 697, in exec_module
File "<frozen importlib._bootstrap>", line 222, in not be initialized.
_call_with_frames_removed el__ of <matlab.engine.enginesession.EngineSession object at 0x00000212C1A2E7B8>>
File "d:\CodeArea\ModelQualityInterface\core\Tools\MatlabSimulink\matlab16bPy35\Lib\site-packages\matlabMatlabSimulink\matlab16bPy35\Lib\site-packages\matlab\engine\enginesession.py", line 14, in __del__\engine\__init__.py", line 80, in <module>
_session = EngineSession() MatlabSimulink\matlab16bPy35\Lib\site-packages\matlab\engine\enginesession.py", line 17, in release
File "d:\CodeArea\ModelQualityInterface\core\Tools\MatlabSimulink\matlab16bPy35\Lib\site-packages\matlab\engine\enginesession.py", line 8, in __init__
pythonengine.createProcess()
matlab.engine.EngineError: MATLAB process session cannot be initialized.
Exception ignored in: <bound method EngineSession.__del__ of <matlab.engine.enginesession.EngineSession object at 0x00000212C1A2E7B8>>
Traceback (most recent call last):
File "d:\CodeArea\ModelQualityInterface\core\Tools\MatlabSimulink\matlab16bPy35\Lib\site-packages\matlab\engine\enginesession.py", line 14, in __del__
self.release()
File "d:\CodeArea\ModelQualityInterface\core\Tools\MatlabSimulink\matlab16bPy35\Lib\site-packages\matlab\engine\enginesession.py", line 17, in release
if self._process_created:
AttributeError: 'EngineSession' object has no attribute '_process_created'
Antworten (1)
surya venu
am 3 Apr. 2024
Hi,
It seems like you are encountering issues when trying to dynamically switch between different versions of the MATLAB engine in Python within a single class. The error you are facing is related to the initialization of the MATLAB process session.To dynamically switch between different versions of the MATLAB engine in Python, you can follow these steps:
1. Use importlib.reload() Correctly:
- When reloading a module, you should reload the top-level module, not a specific attribute like matlab.engine.
- Instead of "matlab = importlib.reload(matlab.engine)", you should use "matlab = importlib.reload(matlab)".
2. Properly Manage Module Paths:
- Ensure that you are correctly managing the module paths when switching between different versions of the MATLAB engine.
- Remove the previous MATLAB engine path from "sys.path" before adding the new one.
Hope it helps.
0 Kommentare
Siehe auch
Kategorien
Mehr zu Call MATLAB from Python finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!