You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB调用含from tensorflow import keras的Python脚本报错求助

解决MATLAB R2018a调用Python脚本时from tensorflow import keras触发的h5py AttributeError问题

根据你描述的场景,这个AttributeError: type object 'h5py.h5r.Reference' has no attribute '__reduce_cython__'错误是MATLAB的Python集成环境和独立Python进程之间的加载机制差异导致的——独立运行时h5py的Cython扩展能正常初始化,但在MATLAB交互环境中,模块加载顺序和延迟加载特性会让h5py的关键属性没被正确注册,进而被Tensorflow的导入流程触发报错。

下面是几个针对性的解决方案,不需要改用系统调用或调整导入语句的替代方案:

1. 确保MATLAB使用的Python环境和本地运行环境完全一致

首先确认MATLAB加载的Python版本和你本地运行python test_from_import.py的版本完全匹配:

  • 在MATLAB中运行py.sys.version,对比本地Python命令行的python --version输出。
  • 如果不一致,重新运行pyversion指定正确的Python路径,然后重启MATLAB(MATLAB会缓存Python环境,必须重启才会生效)。

2. 降级h5py到兼容版本

你当前使用的h5py 2.9.0和Tensorflow 1.14.0、Python3.7在MATLAB环境下存在兼容性问题,建议降级到h5py 2.8.0:
打开命令行,切换到MATLAB指定的Python环境目录,执行:

C:\Users\dmattioli\AppData\Local\Programs\Python\Python37\python.exe -m pip install h5py==2.8.0 --force-reinstall

这个版本的h5py在处理Cython属性初始化时,更适配MATLAB的Python集成环境。

3. 修改Python脚本的导入顺序,强制提前初始化h5py

在你的test_from_import.py开头添加h5py的手动初始化代码,确保在Tensorflow导入前完成h5py的Cython组件加载:

# 提前初始化h5py的核心组件
import h5py
from h5py.h5r import Reference

# 再导入Tensorflow相关模块
from tensorflow import keras
from tensorflow.keras import backend as K

这样可以绕过MATLAB环境下的模块延迟加载问题,让h5py的关键属性在Tensorflow依赖它之前就被正确注册。

4. 调整MATLAB中Python路径的添加逻辑

你当前添加路径的顺序可能导致库加载冲突,建议修改MATLAB代码中的路径插入顺序,并且移除不必要的MATLAB toolbox路径:

testDir = '.....' % test_from_import.py所在目录
addpath(testDir)
% 指定Python可执行文件路径
pcPythonExeDir = 'C:\Users\dmattioli\AppData\Local\Programs\Python\Python37\python.exe';
[ver, exec, loaded] = pyversion(pcPythonExeDir);
pyversion % 打印到命令行

% 包含相关Python库的目录
pyLibraryDir = 'C:\Users\dmattioli\AppData\Local\Programs\Python\Python37\Lib\site-packages';
% 调整路径顺序:优先加载Python的site-packages,再加载脚本目录
insert(py.sys.path, int64(0), pyLibraryDir);
insert(py.sys.path, int64(0), testDir);

%% 调用Python脚本
py_test_mod = py.importlib.import_module('test_from_import')

注意:MATLAB的pyDir是给MATLAB自身用的集成工具路径,不需要添加到Python的sys.path中,添加反而可能导致库加载混淆。

验证步骤

完成上述操作后,必须重启MATLAB,然后重新运行你的MATLAB代码,应该就能正常导入Python脚本了。

内容的提问来源于stack exchange,提问作者Dominik Mattioli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:27:21