Назад | Перейти на главную страницу

RHEL 6.x - yum выдает ошибку «ImportError: нет модуля с именем cElementTree»

Вношу набор изменений в группу из 150 серверов. Все системы смогли успешно загрузить и установить определенный набор RPM через yum, кроме одного. В этой конкретной системе все команды yum, кроме "clean", выводят на экран следующее:

[root@dev1v ~]# yum install sssd
Loaded plugins: rhnplugin
/usr/lib64/python2.6/xmlrpclib.py:612: DeprecationWarning: The xmllib module is obsolete.  Use xml.sax instead.
  import xmllib # lazy subclassing (!)
Traceback (most recent call last):
  File "/usr/bin/yum", line 29, in <module>
    yummain.user_main(sys.argv[1:], exit_code=True)
  File "/usr/share/yum-cli/yummain.py", line 285, in user_main
    errcode = main(args)
  File "/usr/share/yum-cli/yummain.py", line 136, in main
    result, resultmsgs = base.doCommands()
  File "/usr/share/yum-cli/cli.py", line 434, in doCommands
    self._getTs(needTsRemove)
  File "/usr/lib/python2.6/site-packages/yum/depsolve.py", line 99, in _getTs
    self._getTsInfo(remove_only)
  .
  .
  .
  File "/usr/lib/python2.6/site-packages/yum/repoMDObject.py", line 124, in __init__
    self.parse(srcfile)
  File "/usr/lib/python2.6/site-packages/yum/repoMDObject.py", line 140, in parse
    parser = iterparse(infile)
  File "/usr/lib/python2.6/site-packages/yum/misc.py", line 1169, in cElementTree_iterparse
    _cElementTree_import()
  File "/usr/lib/python2.6/site-packages/yum/misc.py", line 1164, in _cElementTree_import
    import cElementTree
ImportError: No module named cElementTree

Я пробовал:

Есть предположения?

Исправление:

Судя по всему, установка Oracle в этой системе ввела путь Oracle в LD_LIBRARY_PATH ...

[root@dev1v etc]# export 
declare -x LD_LIBRARY_PATH="/home/oracle/app/oracle/product/11.2.0/client_1/lib"

Снятие значения переменной позволило yum снова нормально работать.

Я также видел, как кто-то вызвал эту проблему, поставив Oracle lib/ путь в /etc/ld.so.conf.d

С помощью:

эхо /opt/oracle/app/product/11.2.0/dbhome_1/lib/> /etc/ld.so.conf.d/oracle.conf

Решил эту проблему, удалив /etc/ld.so.conf.d/oracle.conf.

Хм, в python 2.6 cElementTree находится в /usr/lib64/python2.6/xml/etree/cElementTree.py, который является частью пакета python. Тот факт, что вы достигли import cElementTree в коде yum указывает, что xml.etree кажется отсутствует.

Попробуйте переустановить python, вручную загрузив rpm и используя rpm -Uvh.

Если это не сработает, что произойдет, если вы import xml.etree.cElementTree в оболочке питона? Что значит rpm --verify python сказать?

Недавно я решил эту проблему следующим образом: (ОС: CentOS 6.3 с установленным Oracle).

  1. редактировать /etc/profile и найти export LD_LIBRARY_PATH линия, если она есть.

  2. Добавить /lib64 перед $ORACLE_HOME/lib

    export  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib64:$ORACLE_HOME/lib:/lib:/usr/lib:/usr/lib/oracle/11.2/client/lib
    
  3. Выйдите из системы и повторно войдите в систему как root.

declare -x не сработало.
Это сработало для меня.

[root@host ~]# unset LD_LIBRARY_PATH

Если какая-либо переменная определена в /etc/ld.so.conf, удалите ее и выполните команду # ldconfig для воссоздания кеша ld.

[root@host ~]# ldconfig

Убедитесь, что библиотека Python теперь связана с правильной библиотекой /lib64/libexpat.so.1.

[root@host ~]# ldd /usr/lib64/python2.6/lib-dynload/pyexpat.so

отключить LD_LIBRARY_PATH, ldconfig, ldd /usr/lib64/python2.6/lib-dynload/pyexpat.so

Как упоминалось в https://serverfault.com/a/686667/431469, это сработало для меня.