jupyter新建python3文件终端报错,导入rclpy报错
-
报错代码如下 -
[IPKernelApp] ERROR | No such comm target registered: jupyter.widget.control [IPKernelApp] WARNING | No such comm: 0b0937b6-197d-4bb2-b693-66346bfd229e
ModuleNotFoundError: No module named 'rclpy._rclpy_pybind11' The C extension '/opt/ros/humble/lib/python3.10/site-packages/_rclpy_pybind11.cpython-38-x86_64-linux-gnu.so' isn't present on the system. Please refer to 'https://docs.ros.org/en/humble/Guides/Installation-Troubleshooting.html#import-failing-without-library-present-on-the-system' for possible solutions
求大佬帮忙看下问题出在哪里,都是按照教程一步步来的
-
@一只活跃的新手 尝试在启动jupyter的终端输入,python
接着输入下面的语句试试import rclpy
如果还不行,试试终极解决方案,导出路径后再启动jupyter
https://fishros.com/d2lros2/#/humble/chapt2/basic/5.Python依赖查找流程
5.Python依赖查找流程(文章来源动手学ROS2)
python的打包和引入依赖的方式相比C++要容易太多。本节小鱼带你来通过几个实例学习下Python的路径查找机制。
1.编写ROS2的Python节点
在
d2lros2/d2lros2/chapt2/basic
新建second_ros2_node.py
,输入下面的内容# 导入rclpy库,如果Vscode显示红色的波浪线也没关系 # 我们只是把VsCode当记事本而已,谁会在意记事本对代码的看法呢,不是吗? import rclpy from rclpy.node import Node # 调用rclcpp的初始化函数 rclpy.init() # 调用rclcpp的循环运行我们创建的second_node节点 rclpy.spin(Node("second_node"))
2.运行Python节点
打开终端,输入指令
ls python3 second_ros2_node.py
打开新的终端,输入
ros2 node list
完美,四行代码写了个ROS2的Python节点。
那么问题来了,我们import rclpy,rclpy到底在哪里?python是如何找到的?
3.Python包查找流程
Python3运行
import rclpy
时候如何找到它的呢?答案是通过环境变量PYTHONPATH
Ctrl+C打断节点运行,接着输入下面指令
echo $PYTHONPATH
结果
/opt/ros/humble/lib/python3.10/site-packages:/opt/ros/humble/local/lib/python3.10/dist-packages
你会发现里面有关于humble的python路径,在上面两个目录下找一下rclpy,看看能不能找到rclpy
查找第一个路径
ls -l /opt/ros/humble/lib/python3.10/site-packages | grep rclpy
没找到,第二个
ls -l /opt/ros/humble/local/lib/python3.10/dist-packages/ | grep rclpy
找到了
drwxr-xr-x 1 root root 4096 Jun 3 04:45 rclpy drwxr-xr-x 2 root root 4096 May 23 22:23 rclpy-3.3.4-py3.10.egg-info
4.unset实验
使用
unset
指令可以将环境变量删除掉,尝试删除掉PYTHONPATH
之后再运行代码,看看是否还可以导入rclpy
。unset python3 second_ros2_node.py
提示如下
root@490925f19143:~/d2lros2/d2lros2/chapt2/basic# python3 second_ros2_node.py Traceback (most recent call last): File "/root/d2lros2/d2lros2/chapt2/basic/second_ros2_node.py", line 3, in <module> import rclpy ModuleNotFoundError: No module named 'rclpy'
请你记住这个报错信息
ModuleNotFoundError: No module named 'xxx'
,这也是你未来学习过程中可能会经常会遇到的。下次遇到时,你会想起小鱼这篇文章,然后对它轻蔑的一笑,接着找到这个库所在的目录,把它加到环境里。
5.总结
本节小鱼带你学习了Python编写ROS2节点的方式,并带你认识了一个常见的错误
ModuleNotFoundError: No module named 'xxx'
。 -
@小鱼 鱼哥,在终端输入python,然后import会报错
ModuleNotFoundError: No module named ‘rclpy._rclpy_pybind11’
-
@一只活跃的新手 不好意思,我貌似忽略了什么,请告诉我你的系统版本,ROS2版本,以及你看的教程,我猜因为教程是foxy版本造成的版本差异.
如果你是在学习动手学机器人学,我推荐的解决方案是卸载conda,接着直接在vscode里安装jupyter插件,就可以愉快的在vscode里继续学习了. -
@小鱼 用的动手学ros2教程https://fishros.com/d2lros2/#/,ros2,python版本是跟着教程一键安装的
这个教程前面都是用的vscode,是不是后面的内容还是foxy版本的没更新呀 -
@一只活跃的新手 这是我的错,你输入python --version检查下你的miniconda中python的版本,如果没猜错应该不是3.10,ros2用的版本是3.10的python,两者有一些差异。
如果可以证实,你可以通过下面这句话关闭miniconda
conda config --set auto_activate_base false
-
@一只活跃的新手 机器人学部分用了foxy部分的教程,个别操作没有更新.
-
@小鱼 ok,多谢鱼哥啦,我去装插件试一试
-
-
@小鱼 鱼哥你好,我也是跟着动手学机器人学的,我也是遇到了无法import rclpy的问题,但我自己创建了一个conda python3.10的虚拟环境,但是也不行,您觉得还能用啥操作修复一下吗,还是说像您建议那样在vscode上学?
-
此回复已被删除! -
@小鱼 这是我的报错
ImportError: /home/sue/miniconda3/envs/sjr/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/_rclpy_pybind11.cpython-310-x86_64-linux-gnu.so)
The C extension '/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/_rclpy_pybind11.cpython-310-x86_64-linux-gnu.so' failed to be imported while being present on the system. Please refer to 'https://docs.ros.org/en/{distro}/Guides/Installation-Troubleshooting.html#import-failing-even-with-library-present-on-the-system' for possible solutions -
@Sue 建议vscode
-
这是我的报错 -
@小鱼 在 jupyter新建python3文件终端报错,导入rclpy报错 中说:
不好意思,我貌似忽略了什么,请告诉我你的系统版本,ROS2版本,以及你看的教程,我猜因为教程是foxy版本造成的版本差异.
如果你是在学习动手学机器人学,我推荐的解决方案是卸载conda,接着直接在vscode里安装jupyter插件,就可以愉快的在vscode里继续学习了. -
@小鱼 您好,我和上面33519928558那位博主的报错问题一模一样,
ubuntu版本:Ubuntu 22.04.1 LTS
ROS2版本:humble
学习的网站:https://fishros.com/d2lros2/#/humble/
请问鱼哥,我也是卸载miniconda,在vscode里面安装jupyter插件么? -
@2424102004 对的
-
@小鱼 好的,感谢鱼哥
-
import rclpy的时候出现 "libstdc++.so.6: version `GLIBCXX_3.4.30' not found"
可以在base环境中试一下 conda install -c conda-forge gcc=12.1.0
亲测有效
-
@554553422 确实,刚问了bing也这么回复的
-