Unable to resolve the name py.module

76 次查看(过去 30 天)
Michael Rego
Michael Rego 2019-10-25
编辑: Chen 2021-5-14
I am trying to call a custom python module in Matlab and I have no issues with running the python standard library modules with py.whatever but when I go to run py.mymodule, I get the error "Unable to resolve the name py.mymodule"
I am able to import the module using py.importlib.import_module('mymodule'), but I cannot call the module or the functions within it.
Any ideas?
  8 个评论
Tom
Tom 2020-7-2
I have the same issue, did you solve it?
Jordi Macià
Jordi Macià 2020-7-16
I also find the same problem. Some times it loads, and others I get this message:
import py.ifcopenshell
Error: The import statement 'import py.ifcopenshell' cannot be found or cannot be imported. Imported names must end with '.*' or be fully qualified.

请先登录,再进行评论。

回答(4 个)

Dan Hazen
Dan Hazen 2019-11-27
Just because I was caught up with a similar issue that was due to my inexperience:
I had a Python file named testme with a function (def testme) inside of it that printed hello world.
To run in MATLAB, I had to do py.testme.testme() to get it to execute, otherwise I was getting the error you described above. The issue seems to be with referencing the module and then the function within.
  1 个评论
Sterling Baird
Sterling Baird 2020-8-21
This suggestion seems to work for me. Thank you!
>> py.scipy.odr()
Unable to resolve the name py.scipy.odr.
>> py.scipy.odr.odr()
Python Error: TypeError: odr() missing required argument 'fcn' (pos 1)

请先登录,再进行评论。


Shishir Singhal
Shishir Singhal 2020-7-28
Hi,
Everytime when you make changes in a python funtion. You need to reload it again into the MATLAB environments using "py.reload("<python_module>")".
As a workaround, please follow the steps given in the documentation here: https://in.mathworks.com/help/matlab/matlab_external/call-modified-python-module.html
Hope it helps!!!
Thanks.
  1 个评论
Ahmed Al-Saffar
Ahmed Al-Saffar 2020-8-5
No it doesn't. The question above never mentioned doing changes. I wish I can delete your answer.

请先登录,再进行评论。


Daniel Toker
Daniel Toker 2019-10-31
I am running into this same problem, but only sometimes - sometimes py.mymodule works, and other times the exact same code turns up this error. Any progress with this?

Chen
Chen 2021-5-14
编辑:Chen 2021-5-14
I am new to Python as well, but I found these solutions after spending some time of debugging. There are two possible reasons for "Unable to resolve the name py.mymodule"
Reason 1:
your python script is not found by the interpreter.
Solution: copy your script into a folder
<your correct Python version folder>\Python38\Lib\site-packages\<mymodule>
Create an empty dummy file __init__.py
Can someone tell me if there's another way to do it?
Reason 2:
Matlab is NOT built to run a python module, like how you would run it in a Python IDE:
run mymodule
You should create a function inside mymodule.py
example,
inside mymodule.py:
....
def mymodfunc ():
... <python codes>
Then run this in matlab:
py.mymodule.mymodfunc(<some arguments>)
According to instructions, whenever you modify any python scripts, remember to reload them, as per instructions in topic:
Reload Modified User-Defined Python Module
However, this doesn't work directly as per claimed, you have to wrap the reload module within a function. Apparently, this is a known bug that still hasn't been fix for some time:
function reloadPy()
warning('off','MATLAB:ClassInstanceExists')
clear classes
mod = py.importlib.import_module('mymodule');
py.importlib.reload(mod);
end

类别

Help CenterFile Exchange 中查找有关 Call Python from MATLAB 的更多信息

标签

产品

Community Treasure Hunt

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

Start Hunting!

Translated by