通过指定python解释器解决ImportError: No module named rospkg的问题
通过指定python解释器解决ImportError: No module named rospkg的问题
第一次写博客,CSDN上很太多类似问题的解决方法,但是解决不了我的问题,这次好不容易解决了我的问题,希望记录一下这个解决方法,帮助到有类似问题的同学。可能写的不对,可能写得让人看不太懂,探索过程其实没什么用,可以直接跳到
从github上down了 ethz-asl/panoptic_mapping 这个工程,在执行roslaunch panoptic_mapping_ros run.launch命令时报错ImportError: No module named rospkg
环境ubutnu20.04,已经成功安装了ros noetic,当前的环境是python3.8.5,曾经安装过python3.7和python3.9,还有ubuntu自带的python2.7,曾经安装过anaconda,但是这里没有激活conda环境,没有冲突。下面是完整的报错信息:
Traceback (most recent call last):
File "/home/leequer/catkin_ws/src/panoptic_mapping/panoptic_mapping_utils/src/flat_dataset/flat_data_player.py", line 7, in <module>
import rospy
File "/opt/ros/noetic/lib/python3/dist-packages/rospy/__init__.py", line 49, in <module>
from .client import spin, myargv, init_node, \
File "/opt/ros/noetic/lib/python3/dist-packages/rospy/client.py", line 52, in <module>
import roslib
File "/opt/ros/noetic/lib/python3/dist-packages/roslib/__init__.py", line 50, in <module>
from roslib.launcher import load_manifest # noqa: F401
File "/opt/ros/noetic/lib/python3/dist-packages/roslib/launcher.py", line 42, in <module>
import rospkg
ImportError: No module named rospkg
网上很多讲import rospkg失败的原因是与anaconda冲突,在~/.bashrc文件中注释anaconda的部分,然后重新source。
但是我这里并没有这个冲突,也没有安装到python2中,在bashrc文件注释anaconda也没用,pip install rospkg提示已经安装在/usr/lib/python3/dist-packages中,直接在终端进入python环境import这两个包可以成功导入:
leequer@leequer-PC:~/catkin_ws/devel$ python
Python 3.8.5 (default, May 27 2021, 13:30:53)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import rospy
>>> import rospkg
>>> rospy.__file__
'/opt/ros/noetic/lib/python3/dist-packages/rospy/__init__.py'
>>> rospkg.__file__
'/usr/lib/python3/dist-packages/rospkg/__init__.py'
但是在执行roslaunch panoptic_mapping_ros run.launch的时候就报错。
考虑到报错中,rospy和roslib安装在/opt/ros/noetic/lib/python3/dist-packages/中,是不是将rospkg安装在相同目录中,可以解决?于是尝试直接将rospkg包从前一个目录复制到后一个目录,果然rospkg报错消失,但是报新的错误,是rospkg的依赖包缺失,于是用下面的命令指定安装目录,安装rospkg:
sudo pip install --target=/opt/ros/noetic/lib/python3/dist-packages rospkg
由于之前的复制,提示rospkg已存在,使用–upgrade来覆盖原有的包
sudo pip install --target=/opt/ros/noetic/lib/python3/dist-packages rospkg --upgrade
还是有报错:
ERROR: launchpadlib 1.10.13 requires testresources, which is not installed.
安装了testresources之后,执行roslaunch panoptic_mapping_ros run.launch报错发生变化:
Traceback (most recent call last):
File "/home/leequer/catkin_ws/src/panoptic_mapping/panoptic_mapping_utils/src/flat_dataset/flat_data_player.py", line 7, in <module>
import rospy
File "/opt/ros/noetic/lib/python3/dist-packages/rospy/__init__.py", line 47, in <module>
from std_msgs.msg import Header
File "/opt/ros/noetic/lib/python3/dist-packages/std_msgs/msg/__init__.py", line 1, in <module>
from ._Bool import *
File "/opt/ros/noetic/lib/python3/dist-packages/std_msgs/msg/_Bool.py", line 6, in <module>
import genpy
File "/opt/ros/noetic/lib/python3/dist-packages/genpy/__init__.py", line 34, in <module>
from . message import Message, SerializationError, DeserializationError, MessageException, struct_I
File "/opt/ros/noetic/lib/python3/dist-packages/genpy/message.py", line 48, in <module>
import yaml
File "/opt/ros/noetic/lib/python3/dist-packages/yaml/__init__.py", line 362
class YAMLObject(metaclass=YAMLObjectMetaclass):
SyntaxError: invalid syntax
在stackoverflow中的解答Failed to launch rospy file: SyntaxError: invalid syntax YAMLObject(metaclass=YAMLObjectMetaclass):中发现这样的解答:
I found the solution!
Turns out all I had to do was to change #!/usr/bin/env python import rospy To: #!/usr/bin/env python3 import rospy
去搜#!/usr/bin/env,找到博文#!/usr/bin/python3 和 #!/usr/bin/env python3 的作用,终于明白出错的原因和解决的方法。
原来python文件的开头会指定python解释器,而#!/usr/bin/env python的作用就是在环境中自己找,找到哪个算哪个,当然容易出错!找到报错信息中的python文件,我这里是flat_data_player.py,打开这个文件,
在报错的python文件开头,将#!/usr/bin/env python改成#!/usr/bin/python3.8,指定python解释器,终于不再报错,问题解决。
#!/usr/bin/env/ python3 表示从 "PATH 环境变量"中查找 python3 解释器的位置, 路径没有被写死, 而是在"环境变量"中寻找 python3 解释器的安装路径, 再调用该路径下的解释器来执行脚本.
显然, 采用 #!/usr/bin/env python3 的写法更灵活更具有通用性, 推荐使用这种写法
作者:patiencing
链接:https://www.jianshu.com/p/400c612381dd
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
虽然这种写法灵活,但是对于我们这些不熟悉ubuntu环境配置的菜鸟来说经常出错,常见的错误是anaconda和ros的python环境冲突,我这次遇到的错误可能不太常见,但总归是python解释器选择的问题。通过在python文件开头指定解释器,可以避免安装包已经下载,却提示找不到安装包的问题。
主要的两篇参考博客在文中以超链接的形式给出,这里不再单列
所有评论(0)