GNU Radio报错AttributeError: module 'tutorial'无'my_qpsk_demod_cb'属性求解
问题解决思路
你遇到的AttributeError: module 'tutorial' has no attribute 'my_qpsk_demod_cb'错误,本质是自定义OOT模块的Python绑定没有正确生成、安装或者被系统识别,按照以下步骤逐一排查即可:
- 检查公共头文件
include/tutorial/my_qpsk_demod_cb.h
确认该文件中正确声明了my_qpsk_demod_cb类,且添加了生成SWIG绑定所需的GR_SWIG_BLOCK_MAGIC2(tutorial, my_qpsk_demod_cb)宏,这个宏是Python可以识别到自定义块的核心依赖,缺失就不会生成对应的Python接口。 - 检查SWIG接口配置
打开模块swig目录下的tutorial_swig.i文件,确认已经添加了以下两行内容:
漏加上述内容的话,SWIG不会将该自定义块绑定到Python的%include "my_qpsk_demod_cb.h" %template(my_qpsk_demod_cb_sptr) boost::shared_ptr<gr::tutorial::my_qpsk_demod_cb>;tutorial模块中。 - 检查编译配置
打开模块lib目录下的CMakeLists.txt,确认my_qpsk_demod_cb_impl.cc已经被添加到模块的源码编译列表中,未添加的话块代码不会被编译进最终的模块库文件,Python自然无法识别。 - 重新编译安装模块
进入模块的build目录,依次执行以下命令完成重新编译安装:
注意如果使用了Python虚拟环境,需要确保cmake配置的安装路径对应虚拟环境的第三方库目录,避免模块被安装到系统默认路径后虚拟环境无法识别。cmake .. make -j$(nproc) sudo make install sudo ldconfig - 验证绑定是否生效
终端执行python3进入交互环境,依次运行以下命令验证:
输出为import tutorial print("my_qpsk_demod_cb" in dir(tutorial))True就说明绑定已经生效,重新运行流图即可。如果输出为False,检查是否有旧版本的tutorial模块残留,删除残留文件后重新执行安装步骤即可。
内容的提问来源于stack exchange,提问作者MarioM
相关产品推荐
相关产品推荐

