2017-06-15 176 views
1

我試圖在Debian Jessie上安裝ROS,當我運行sudo rosdep init時遇到錯誤。我遵循的說明位於此URL(http://wiki.ros.org/kinetic/Installation/Source)。我從源代碼安裝,而不是通過他們的回購,因爲一些圖書館的衝突。Rosdep無法導入python模塊pyexpat

運行sudo rosdep init會導致以下輸出。

Traceback (most recent call last): 
    File "/usr/bin/rosdep", line 3, in <module> 
    from rosdep2.main import rosdep_main 
    File "/usr/lib/python2.7/dist-packages/rosdep2/__init__.py", line 40, in <module> 
    from .installers import InstallerContext, Installer, \ 
    File "/usr/lib/python2.7/dist-packages/rosdep2/installers.py", line 35, in <module> 
    from rospkg.os_detect import OsDetect 
    File "/usr/lib/python2.7/dist-packages/rospkg/__init__.py", line 42, in <module> 
    from .rospack import expand_to_packages, get_package_name, \ 
    File "/usr/lib/python2.7/dist-packages/rospkg/rospack.py", line 35, in <module> 
    from xml.etree.cElementTree import ElementTree 
    File "/usr/lib/python2.7/xml/etree/cElementTree.py", line 3, in <module> 
    from _elementtree import * 
ImportError: PyCapsule_Import could not import module "pyexpat" 

我想,這是蟒蛇根本就沒有找到模塊,所以我拍了一下所在之處,並在Python的路徑,但無濟於事。

[[email protected]:~ ] $$ find/-name pyexpat* 
/usr/include/python2.7/pyexpat.h 
/usr/include/python3.4m/pyexpat.h 
/usr/share/jython/Lib/pyexpat.py 
/usr/share/jython/Lib/pyexpat$py.class 
/usr/lib/python2.7/lib-dynload/pyexpat.x86_64-linux-gnu.so 

>>> import sys 
>>> print sys.path 
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', 
'/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', 
'/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', 
'/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', 
'/usr/lib/python2.7/dist-packages/wx-3.0-gtk2'] 

因此它是在路徑中。接下來我運行了一個strace -e open rosdep,只是確保它找到了這個文件。這是輸出。它看起來像找到該文件,然後立即關閉它。這是相關的位。

open("/usr/lib/python2.7/lib-tk/pyexpat.py", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("/usr/lib/python2.7/lib-tk/pyexpat.pyc", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("/usr/lib/python2.7/lib-dynload/pyexpat.x86_64-linux-gnu.so", O_RDONLY) = 9 
open("/usr/lib/python2.7/lib-dynload/pyexpat.x86_64-linux-gnu.so", O_RDONLY|O_CLOEXEC) = 10 
Traceback (most recent call last): 

這個問題(ImportError: PyCapsule_Import could not import module "pyexpat")認爲一個嘗試重命名庫,或重新安裝。我已經嘗試了這兩件事,但都沒有奏效。有沒有人有任何想法?

編輯:自發布以來,按照forax的入口,我嘗試設置LD_LIBRARY_PATH,在python shell中完成pyexpat的手動導入,並查看了pyexpat的ldd輸出。

手冊pyexpat

Python 2.7.9 (default, Jun 29 2016, 13:08:31) 
    [GCC 4.9.2] on linux2 
    Type "help", "copyright", "credits" or "license" for more information. 
    >>> import pyexpat 
. 

在pyexpat庫

[[email protected]:~ ] $$ ldd /usr/lib/python2.7/lib-dynload/pyexpat.x86_64-linux-gnu.so 
    linux-vdso.so.1 (0x00007ffc069da000) 
    libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f7214382000) 
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7214165000) 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7213db9000) 
    /lib64/ld-linux-x86-64.so.2 (0x000055fe01ce4000) 
+0

聽起來這個問題:運行AWS時Pyexpat導入錯誤CLI(https://stackoverflow.com/q/25934479/ 2938861) – farax

+0

@farax我試着設置LD_LIBRARY_PATH變量,但我仍然得到相同的錯誤。 –

回答

0

運行ldd請嘗試在Python Shell手動導入和發佈結果的進口。

$ python 
Python 2.7.9 (default, Jun 29 2016, 13:08:31) 
[GCC 4.9.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import pyexpat 
>>> 

並檢查LIB負荷,應該是這樣的:

$ ldd /usr/lib/python2.7/lib-dynload/pyexpat.x86_64-linux-gnu.so 
    linux-vdso.so.1 (0x00007ffe82d10000) 
    libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f6387386000) 
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f6387169000) 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6386dbd000) 
    /lib64/ld-linux-x86-64.so.2 (0x00005628bbd68000) 
+0

在python shell中手動導入不會返回任何輸出;我認爲這意味着它是成功的。 運行'ldd/usr/lib/python2.7/lib-dynload/pyexpat.x86_64-linux-gnu.so'會返回與您發佈的完全相同的結果。每行結尾只有十六進制數不同。 –

+0

標準的python環境很好,並且libexpat庫存在。我無法想象設置改變libpath - 不知道。 – farax