我怎么能明确具体的Python类/模块从内存中不使用“明确类”

71(30天)
我已经成功地开发了一个工作流,请允许我从Matlab调用自定义python代码,参见下面的两个脚本:
MATLAB:
函数= reloadPy ()%的Matlab函数
清晰的
mod = py.importlib.import_module (“mymod”);
py.importlib.reload (mod);
v1 = 1:5;
v2 = 6:10;
=双(py.mymod.add2Vectors (v1、v2));
Python:
#mymod。py - python函数
进口numpy
进口数组
defadd2Vectors (v1、v2):
myarray = numpy.array (v1) + numpy.array (v2)
返回array.array (' d 'myarray)
如果我从命令行调用reloadPy得到以下输出:
> > = reloadPy测试
警告:对象的“onCleanup”类存在。不能明确这类或它的任何超类。
>在reloadPy(2行)
警告:对象的“表”类存在。不能明确这类或它的任何超类。
>在reloadPy(2行)
警告:对象的datetime的类存在。不能明确这类或它的任何超类。
>在reloadPy(2行)
测试=
7 9 11 13 15
> >
这些警告是源于“明确类”命令。我使用的命令序列(2 - 4行)时重新加载python模块调试。我让mymod任何更改。py不是俘虏,除非我所有3命令执行。“明确”的文档:
调用清除所有、清晰,明确的功能减少代码的性能,通常是不必要的。
明确一个特定类,使用明确myClass。
有办法就清楚我的python类或模块吗? 我找不到这个名字。我试着
[M X C] = inmem
但没有结果似乎与python。
1评论
埃米尔盖革
埃米尔盖革 2018年7月9日
更新:我不能使用这个工作流如果我传递一个变量到reloadPy因为明确的类将删除变量。我也提交了一份支持的票。金宝app

登录置评。

答案(2)

埃米尔盖革
埃米尔盖革 2018年7月19日
我收到一个答案的支持。金宝app清算的python模块是不可能的。但包装重载函数的语句是一个有效的解决因为任何用户变量的范围。例如:
函数reloadPy ()
警告(“关闭”,“MATLAB: ClassInstanceExists”)
清晰的
mod = py.importlib.import_module (“垫”);
py.importlib.reload (mod);

风扇杨
风扇杨 2022年6月20日
说,如果我们想重新加载“util.py”:
py。util = py.importlib.reload (py.importlib.import_module (“跑龙套”));
这条线将会为我工作。它实际上与名字“py”重新定义一个结构体,所以它可能覆盖其他模块你进口,但如果你所有的python模块是显式地以这种方式进口,似乎没有问题。无论如何,这应该被视为一个解决方案。
1评论
彼得羌族
彼得羌族 10分钟前
这个问题已经困扰我很久了。感谢您的解决方案!
是一个非常有用的方法,因为在我与py 2021 b 3.9中,命令行:
清晰的
myModule里= py.importlib.import_module (“myModule里”);
py.importlib.reload (myModule里);
不是在我的环境中正常工作。
我猜缓存仍然存在在某处运行代码。所以覆盖似乎成为唯一适合我的方法。为了避免覆盖matlab内置py模块我改变模块变量名由删除公司产品名称“py”。,like:
myModule里= py.importlib.reload (py.importlib.import_module (“myModule里”));
然后调用我们的模块功能:
myModule.myFunction (args)
因此它不会覆盖py。它对我来说,至少现在。

登录置评。

类别

找到更多的在从MATLAB调用Python帮助中心文件交换

下载188bet金宝搏


释放

R2017a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!