背景描述:
网上多数说法为,此问题起源于python环境中enum34模块冲突,python3.6后enum34库与标准库不兼容且不必要,之前python版本中有安装单独的此库,同时存在且python3.6运行时会出现此问题;
个人历程
使用机器人操作系统ROS时用python2.7版本,后不知什么时候安装了python3.6;
ROS在进行arbotiX+rviz仿真时出现python3相关报错,于是参考其他大兄弟做法在环境变量.bashrc中添加了python2路径,并在要运行的文件中指定python2;
gedit ~/.bashrc //打开.bashrc文件
//在最下面添加
# export PYTHONPATH="/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/yaml:$PYTHONPATSH"
后在运行gdb调试中的start、run时,出现AttributeError: module ‘enum‘ has no attribute ‘IntFlag‘报错,根据提示信息看到应该是python3.6运行出了问题;
网上给的多数说法为,用pip命令卸载enum34或直接删除enum34中对应文件夹;无奈的是我的pip命令也会报AttributeError: module ‘enum‘ has no attribute ‘IntFlag‘这个错误,并且对应位置找不到enum34这个文件夹;且担心卸载了enum34会影响python2的环境,进而影响我的ROS使用;
于是参考其他大兄弟做法把.bashrc文件中之前加入的python2路径注释掉,并使用以下命令清空$PYTHONPATH变量:
unset PYTHONPATH
然后问题又来了,没了PYTHONPATH,ROS运行不了了,报错为
ImportError: No module named rosmaster.master_api
显然是缺少rosmaster了,这时候更新一下
sudo apt update
再次运行ROS正常,且此时gdb调试中的start、run也正常运行,不再报错;
此时再查看$PYTHONPATH,发现是在ROS相关文件下;
home/xxx/catkin_ws/devel/lib/python2.7/dist-packages:/opt/ros/melodic/lib/python2.7/dist-packages
以上为本人调整python环境相关报错的过程,或许存在表述不当之处,仅供参考!
参考:
- https://blog.csdn.net/xiaojinger_123/article/details/120199802
- https://shliang.blog.csdn.net/article/details/87255393?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.pc_relevant_default&utm_relevant_index=9
- 参考不全