2017-06-15 410 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