Pydot的Bug,到底使用Pyparsing1還是2的糾結

概述

如題,在使用ROS的過程中(博主平臺是Arch Linux+ROS Indigo),在畫圖方面會大量用到Pyparsing這個包。但是比較坑人的一點是Pydot存在Bug(或者說Pyparsing存在bug),就是在import pydot時會報錯:
Couldn't import dot_parser, loading of dot files will not be possible.
這個錯誤並不是Fatal性的,在Pydot源碼裏也可以看到:

/usr/lib/python2.7/site-packages/pydot.py

try:
    import dot_parser
except Exception, e:
    print "Couldn't import dot_parser, loading of dot files will not be possible."

可見雖然不能成功import dot_parser,程序並沒有退出,還是可以繼續運行,只要最終程序不依賴於dot_parser即可。
感覺pydot的作者也很無奈。。。這主要是由於pyparsing在從1.5.7升級到2造成的。

會遇到的問題

目前我碰到的主要是兩個問題:
1. ROS包rqt_graph會使用到dot_parser,如果使用2.0以上版本的pyparsing無法繪圖
2. ROS包ros-indigo-rosserial等在安裝時cmake依賴2.0以上的pyparsing,使用2.0以下版本會編譯失敗。

解決方案

解決這個問題有兩種方案:

Solution 1

第一種是降級pyparsing,不使用rqt_graph,使用rostopic list等命令代替,目前已知產生bug程序只有rqt_graph。
方法:
建議先嚐試:

$ sudo pip install pyparsing==1.5.7

若不成功,則下載pyparsing源碼:http://sourceforge.net/projects/pyparsing/ 注意下載1.5.7版本,下載下來之後使用tar -xvzf [名字]解壓,然後進入目錄使用

sudo python setup.py install

來安裝。
然而不得不說rqt_graph是個比較好用的工具。。。不用的話要麻煩很多,因此可以嘗試第二種方案。

Solution 2

第二種方案簡單來說就是使用pydotplus代替pydot,然後修改rqt_graph源碼來進行patch。
首先安裝pydotplus:

sudo pip install pydotplus

然後修改rqt_graph的源碼將依賴從pydot改變爲pydotplus

    $vim /opt/ros/indigo/lib/python2.7/site-packages/qt_dotgraph/dot_to_qt.py
    ---------------------------
    line  38: import pydot
    改爲: import pydotplus as pydot 即可
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章