鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    jupyter新建python3文件终端报错,导入rclpy报错

    已定时 已固定 已锁定 已移动 已解决
    综合问题
    ros2 jupyternotebook rclpypybind11
    11
    25
    5.2k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 小鱼小
      小鱼 技术大佬 @一只活跃的新手
      最后由 编辑

      @一只活跃的新手 尝试在启动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
      

      image-20220603154952746

      完美,四行代码写了个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'。

      新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

      一只活跃的新手一 1 条回复 最后回复 回复 引用 0
      • 一只活跃的新手一
        新手而已 @小鱼
        最后由 编辑

        @小鱼 鱼哥,在终端输入python,然后import会报错

        ModuleNotFoundError: No module named ‘rclpy._rclpy_pybind11’
        
        小鱼小 1 条回复 最后回复 回复 引用 0
        • 小鱼小
          小鱼 技术大佬 @一只活跃的新手
          最后由 编辑

          @一只活跃的新手 不好意思,我貌似忽略了什么,请告诉我你的系统版本,ROS2版本,以及你看的教程,我猜因为教程是foxy版本造成的版本差异.
          如果你是在学习动手学机器人学,我推荐的解决方案是卸载conda,接着直接在vscode里安装jupyter插件,就可以愉快的在vscode里继续学习了.

          新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

          一只活跃的新手一 1 条回复 最后回复 回复 引用 2
          • 一只活跃的新手一
            新手而已 @小鱼
            最后由 一只活跃的新手 编辑

            @小鱼 用的动手学ros2教程https://fishros.com/d2lros2/#/,ros2,python版本是跟着教程一键安装的
            这个教程前面都是用的vscode,是不是后面的内容还是foxy版本的没更新呀

            小鱼小 2 条回复 最后回复 回复 引用 0
            • 小鱼小
              小鱼 技术大佬 @一只活跃的新手
              最后由 小鱼 编辑

              @一只活跃的新手 这是我的错,你输入python --version检查下你的miniconda中python的版本,如果没猜错应该不是3.10,ros2用的版本是3.10的python,两者有一些差异。

              如果可以证实,你可以通过下面这句话关闭miniconda

              conda config --set auto_activate_base false
              

              新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

              SueS 1 条回复 最后回复 回复 引用 0
              • 小鱼小
                小鱼 技术大佬 @一只活跃的新手
                最后由 编辑

                @一只活跃的新手 机器人学部分用了foxy部分的教程,个别操作没有更新.

                新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

                一只活跃的新手一 1 条回复 最后回复 回复 引用 0
                • 一只活跃的新手一
                  新手而已 @小鱼
                  最后由 编辑

                  @小鱼 ok,多谢鱼哥啦,我去装插件试一试

                  1 条回复 最后回复 回复 引用 0
                  • 一只活跃的新手一 一只活跃的新手 将这个主题标记为已解决,在
                  • SueS
                    Sue @小鱼
                    最后由 编辑

                    @小鱼 鱼哥你好,我也是跟着动手学机器人学的,我也是遇到了无法import rclpy的问题,但我自己创建了一个conda python3.10的虚拟环境,但是也不行,您觉得还能用啥操作修复一下吗,还是说像您建议那样在vscode上学?

                    SueS 小鱼小 2 条回复 最后回复 回复 引用 0
                    • SueS
                      Sue
                      最后由 编辑

                      此回复已被删除!
                      1 条回复 最后回复 回复 引用 0
                      • SueS
                        Sue @Sue
                        最后由 编辑

                        @小鱼 这是我的报错

                        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

                        1 条回复 最后回复 回复 引用 0
                        • 小鱼小
                          小鱼 技术大佬 @Sue
                          最后由 编辑

                          @Sue 建议vscode

                          新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

                          1 条回复 最后回复 回复 引用 0
                          • 35199285583
                            旺仔牛奶巧克力味
                            最后由 编辑

                            fc08f9e5-d82f-4086-aaf9-1cefbd9f4526-image.png ca308bbd-ffc7-4c6a-b486-ec8486b1e689-image.png
                            这是我的报错

                            小鱼小 1 条回复 最后回复 回复 引用 0
                            • 小鱼小
                              小鱼 技术大佬 @3519928558
                              最后由 编辑

                              @3519928558

                              @小鱼 在 jupyter新建python3文件终端报错,导入rclpy报错 中说:

                              不好意思,我貌似忽略了什么,请告诉我你的系统版本,ROS2版本,以及你看的教程,我猜因为教程是foxy版本造成的版本差异.
                              如果你是在学习动手学机器人学,我推荐的解决方案是卸载conda,接着直接在vscode里安装jupyter插件,就可以愉快的在vscode里继续学习了.

                              新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

                              24241020042 1 条回复 最后回复 回复 引用 0
                              • 24241020042
                                是我不配→_→ @小鱼
                                最后由 编辑

                                @小鱼 您好,我和上面33519928558那位博主的报错问题一模一样,
                                ubuntu版本:Ubuntu 22.04.1 LTS
                                ROS2版本:humble
                                学习的网站:https://fishros.com/d2lros2/#/humble/
                                请问鱼哥,我也是卸载miniconda,在vscode里面安装jupyter插件么?

                                小鱼小 1 条回复 最后回复 回复 引用 0
                                • 小鱼小
                                  小鱼 技术大佬 @2424102004
                                  最后由 编辑

                                  @2424102004 对的

                                  新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

                                  24241020042 1 条回复 最后回复 回复 引用 0
                                  • 24241020042
                                    是我不配→_→ @小鱼
                                    最后由 编辑

                                    @小鱼 好的,感谢鱼哥

                                    1 条回复 最后回复 回复 引用 0
                                    • 5545534225
                                      David
                                      最后由 编辑

                                      import rclpy的时候出现 "libstdc++.so.6: version `GLIBCXX_3.4.30' not found"

                                      可以在base环境中试一下 conda install -c conda-forge gcc=12.1.0

                                      亲测有效👍

                                      28634977052 29295209792 K 3 条回复 最后回复 回复 引用 1
                                      • 28634977052
                                        2863497705 @554553422
                                        最后由 编辑

                                        @554553422 确实,刚问了bing也这么回复的

                                        1 条回复 最后回复 回复 引用 0
                                        • 小鱼小 小鱼 在 中 引用了 这个主题
                                        • 29295209792
                                          孑 @554553422
                                          最后由 编辑

                                          @554553422 真的有用感谢大佬

                                          5926381815 1 条回复 最后回复 回复 引用 0
                                          • 1
                                            小辣鸡
                                            最后由 编辑

                                            怎么在vscode中安装juypter?

                                            1 条回复 最后回复 回复 引用 0
                                            • 第一个帖子
                                              最后一个帖子
                                            皖ICP备16016415号-7
                                            Powered by NodeBB | 鱼香ROS