MATLAB Answers

Matlab requires restart before changes in Python code changes are applied

50 views (last 30 days)
Daniel Stolzberg
Daniel Stolzberg on 7 Aug 2020
Answered: Chen on 14 May 2021 at 16:16
Background:
I am running Matlab 2020a and Python 3.8 on Win 10. I am launching Matlab from an Anaconda prompt in the mne environment (https://mne.tools/stable/index.html).
I am calling a Python function using the standard syntax - ex: r = py.test.score(X,y).
The Issue:
I make changes to the Python code, save, and runfile which are immediately available in my Python ide (Spyder), but Matlab does run the latest version of the Python function. I have to restart Matlab - using the Anaconda prompt in the mne environment - each time I make a change to my Python code. Upon restart, the updated Python code is used by Matlab.
I update the current Python path prior to calling my Python function using:
if count(py.sys.path,'')==0
insert(py.sys.path,int32(0),'');
end
I have tested this with a basic "Hello World" type Python function and this is my experience.
I am not sure how to further troubleshoot this issue.
Is there something I may be doing incorrectly?
Thanks in advance,
Daniel
  2 Comments
Daniel Stolzberg
Daniel Stolzberg on 7 Aug 2020
Thank you for your suggestion, Stijn.
I don't see any files with the .asv extension in my working folder.
There is a folder called __pycache__ which has a file called test.cpython-38.pyc in it. This seems to be a compiled python file.
Any other suggestions? It is quite inconvenient to restart Matlab each time I make a change to the Python script.

Sign in to comment.

Accepted Answer

Sean de Wolski
Sean de Wolski on 7 Aug 2020
Try this
clear classes
m = py.importlib.import_module('yourlib');
py.importlib.reload(m);
  2 Comments
Ronan Fleming
Ronan Fleming on 12 Apr 2021
https://nl.mathworks.com/help/releases/R2021a/matlab/matlab_external/out-of-process-execution-of-python-functionality.html

Sign in to comment.

More Answers (1)

Chen
Chen on 14 May 2021 at 16:16
Sean's answer will not work without wrapping a function around it.
Apparently, it's a known bug
function reloadPy()
warning('off','MATLAB:ClassInstanceExists')
clear classes
mod = py.importlib.import_module('mat');
py.importlib.reload(mod);
end

Tags

Products


Release

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!