ROS中导入自定义Python模块失败报No module named Control问题求助
问题排查及解决步骤
核心错误原因
你的配置错误集中在setup.py路径映射、包声明,以及导入规则三个方面:
setup.py中的package_dir配置错误,无法正确映射包的实际存储路径- 未声明
Control作为quantum_drone的子包,ROS不会将其加入Python路径 - 导入语句不符合ROS Python包的导入规则
具体修改方案
1. 修正setup.py配置
将quantum_drone包根目录下的setup.py替换为如下内容:
#!/usr/bin/env python # noinspection PyUnresolvedReferences from distutils.core import setup from catkin_pkg.python_setup import generate_distutils_setup # fetch values from package.xml setup_args = generate_distutils_setup( packages=['quantum_drone', 'quantum_drone.Control', 'quantum_drone.scripts'], package_dir={'': '.'}, ) setup(**setup_args)
说明:
package_dir={'': '.'}表示包根目录就是setup.py所在的当前目录,不需要额外嵌套src文件夹;同时显式声明所有需要导出的子包。
2. 修正所有Python文件的导入语句
simulator.py中的导入语句from Control import PID替换为:from quantum_drone.Control import PIDPID.py中的导入语句from MonotonicTime import monotonic_time替换为相对导入,避免包导入时报错:from .MonotonicTime import monotonic_time
3. 修正CMakeLists.txt配置
catkin_install_python仅需保留可执行脚本,不需要将模块文件安装到bin目录,修改为:
catkin_install_python(PROGRAMS scripts/simulator.py DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} )
确保catkin_python_setup()行已取消注释。
生效操作
- 删除工作空间根目录下的
build、devel文件夹,清除旧配置缓存 - 重新执行
catkin_make编译 - 执行
source devel/setup.bash激活环境 - 运行
rosrun quantum_drone simulator.py即可正常导入模块
可选排查方案
如果仍有报错,可在simulator.py开头加入以下代码,运行时查看Python路径是否包含当前工作空间的devel/lib/pythonX/dist-packages目录:
import sys print(sys.path)
内容的提问来源于stack exchange,提问作者NotALolicon
相关产品推荐
相关产品推荐

