运行roscore出错:SyntaxError: invalid syntax
背景
系统为ubuntu16.04,自带python2.7和3.5。
有一次用pip整理python包,从根目录大量转移到用户目录,之后运行roscore就出问题了。
报错信息
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
Traceback (most recent call last):
File "/usr/bin/rosversion", line 6, in <module>
from pkg_resources import load_entry_point
File "/home/hongzhilu/.local/lib/python3.5/site-packages/pkg_resources/__init__.py", line 1365
raise SyntaxError(e) from e
^
SyntaxError: invalid syntax
Invalid <param> tag: Cannot load command parameter [rosversion]: command [rosversion roslaunch] returned with code [1].
Param xml is <param command="rosversion roslaunch" name="rosversion"/>
The traceback for the exception was written to the log file
报错分析
- 语法错误。python2和3的语法不兼容被诟病已久。
- 出错的路径一开始是系统目录
/usr/bin
下的rosversion
,在import时跳转到了最近才有的用户目录python3.5/site-packages
寻找pkg_resources
。
查询
运行
printenv | grep python
发现路径里不包括系统目录下的python包路径。
再运行
locate pkg_resources
输出里有
……
/usr/lib/python2.7/dist-packages/pkg_resources
/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py
/usr/lib/python2.7/dist-packages/pkg_resources/__init__.pyc
……
推论
roscore本来应该一直在系统目录下寻找python2的pkg_resources
,然而路径被我的之前的python包配置操作误导到了用户目录,使其找进了python3的同名文件,出现语法错。
解决方法
在用户根目录的启动文件./bashrc中,添加路径
PYTHONPATH=/usr/lib/python2.7/dist-packages:${PYTHONPATH}
注意是向前添加,保证它先寻找到系统目录下的路径而不是用户目录。
修改后打开新终端ctrl+alt+T
,或运行一下启动文件
source ~/.bashrc
最后运行roscore,成功。