2017-06-15 1 views
1

J'essaye d'installer ROS sur Debian Jessie et je cours une erreur quand je cours sudo rosdep init. Les instructions que je suis sont à cette URL (http://wiki.ros.org/kinetic/Installation/Source). J'installe à partir de la source et non pas de leurs repos en raison de certains conflits de bibliothèque.Rosdep ne parvient pas à importer le module python pyexpat

L'exécution sudo rosdep init aboutit à la sortie suivante.

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" 

Je pensais que ce python était tout simplement pas trouver le module, donc j'ai regardé où il se trouvait et au chemin de python, en vain.

[[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'] 

Donc, c'est dans le chemin. J'ai ensuite couru un strace -e open rosdep juste assurez-vous qu'il trouvait le fichier. Voici la sortie de cela. Il semble qu'il trouve le fichier et le ferme immédiatement. Voici le bit pertinent.

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): 

Cette question (ImportError: PyCapsule_Import could not import module "pyexpat") a suggéré que l'on Renommez la bibliothèque, ou de le réinstaller. J'ai essayé ces deux choses et aucun n'a fonctionné. Quelqu'un a-t-il une idée?

EDIT: Depuis la publication, conformément aux instructions de forax, j'ai essayé de définir LD_LIBRARY_PATH, fait une importation manuelle de pyexpat dans un shell python, et jeté un oeil à la sortie de ldd pour pyexpat.

importation manuelle de 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 
. 

Courir ldd sur la bibliothèque 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

Ressemble cette question: [Erreur d'importation pyexpat lors de l'exécution aws cli] (https://stackoverflow.com/q/25934479/ 2938861) – farax

+0

@farax J'ai essayé de définir la variable LD_LIBRARY_PATH, mais j'ai toujours la même erreur. –

Répondre

0

S'il vous plaît essayer importation manuelle en shell python et poster le résultat.

$ 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 
>>> 

et vérifier la charge lib, devrait ressembler à ceci:

$ 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

L'importation manuelle dans un shell python ne renvoie aucune sortie; Je suppose que cela signifie que c'est réussi. Exécuter 'ldd/usr/lib/python2.7/lib-dynload/pyexpat.x86_64-linux-gnu.so' renvoie exactement la même chose que ce que vous avez posté. Seul l'hexagone à la fin de chaque ligne diffère. –

+0

L'environnement python standard est correct et la libexpat lib est en place. Je ne peux pas imaginer que la configuration change le libpath - n'en ai aucune idée. – farax