Centos Yum error – ImportError: No module named cElementTree

来源:互联网 发布:中国社交网络发展历程 编辑:程序博客网 时间:2024/05/22 17:44

centos 下执行yum 会报以下错误

# yum install openssh-clients

Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.btte.net
 * updates: mirrors.tuna.tsinghua.edu.cn
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/depsolve.py", line 110, in _getTsInfo
    pkgSack = self.pkgSack
  File "/usr/lib/python2.6/site-packages/yum/__init__.py", line 887, in <lambda>
    pkgSack = property(fget=lambda self: self._getSacks(),
  File "/usr/lib/python2.6/site-packages/yum/__init__.py", line 669, in _getSacks
    self.repos.populateSack(which=repos)
  File "/usr/lib/python2.6/site-packages/yum/repos.py", line 308, in populateSack
    sack.populate(repo, mdtype, callback, cacheonly)
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 165, in populate
    if self._check_db_version(repo, mydbtype):
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 223, in _check_db_version
    return repo._check_db_version(mdtype)
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1256, in _check_db_version
    repoXML = self.repoXML
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1455, in <lambda>
    repoXML = property(fget=lambda self: self._getRepoXML(),
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1447, in _getRepoXML
    self._loadRepoXML(text=self)
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1437, in _loadRepoXML
    return self._groupLoadRepoXML(text, self._mdpolicy2mdtypes())
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1412, in _groupLoadRepoXML
    if self._commonLoadRepoXML(text):
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1225, in _commonLoadRepoXML
    if self._latestRepoXML(local):
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1194, in _latestRepoXML
    oxml = self._saveOldRepoXML(local)
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1053, in _saveOldRepoXML
    xml = self._parseRepoXML(old_local, True)
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1036, in _parseRepoXML
    return repoMDObject.RepoMD(self.id, local)
  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 1141, in cElementTree_iterparse
    _cElementTree_import()
  File "/usr/lib/python2.6/site-packages/yum/misc.py", line 1136, in _cElementTree_import
    import cElementTree

ImportError: No module named cElementTree


系统是从官网上下载的centos 6.4 开始yum是可以用的,安装了服务器编译用到的动态库之后,发现yum的时候会报这个错误。

之前一直网上寻找答案,一直都找不到答案。问一个运维的同事,

在 python 下 执行 from xml.etree import cElementTree 当时是没有报错的。

就把  /etc/ld.so.conf 里自己添加的 /usr/local/lib 注释掉,再执行 /sbin/ldconfig。yum就可以使用了,又把/usr/local/lib 加上。

后来一直没用,等到再用yum的时候。发现yum又报这个错误了。 这次  from xml.etree import cElementTree 会报错

File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.6/xml/etree/cElementTree.py", line 3, in <module>
    from _elementtree import *
ImportError: /usr/lib64/python2.6/lib-dynload/pyexpat.so: symbol XML_SetHashSalt, version EXPAT_2_0_1_RH not defined in file libexpat.so.1 with link time reference

再次去掉 /etc/ld.so.conf 里自己添加的/usr/local/lib 就不好用了。


后来找到了解决方案

 from xml.etree import cElementTree 执行报错可以看出 跟 libexpat.so.1 有关

执行 strace -o /root/yum.txt yum 找到libexpat.so.1路径,显示如下


# strace -o /root/yum.txt yum list
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.btte.net
 * updates: mirrors.tuna.tsinghua.edu.cn
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/depsolve.py", line 110, in _getTsInfo
    pkgSack = self.pkgSack
  File "/usr/lib/python2.6/site-packages/yum/__init__.py", line 887, in <lambda>
    pkgSack = property(fget=lambda self: self._getSacks(),
  File "/usr/lib/python2.6/site-packages/yum/__init__.py", line 669, in _getSacks
    self.repos.populateSack(which=repos)
  File "/usr/lib/python2.6/site-packages/yum/repos.py", line 308, in populateSack
    sack.populate(repo, mdtype, callback, cacheonly)
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 165, in populate
    if self._check_db_version(repo, mydbtype):
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 223, in _check_db_version
    return repo._check_db_version(mdtype)
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1256, in _check_db_version
    repoXML = self.repoXML
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1455, in <lambda>
    repoXML = property(fget=lambda self: self._getRepoXML(),
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1447, in _getRepoXML
    self._loadRepoXML(text=self)
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1437, in _loadRepoXML
    return self._groupLoadRepoXML(text, self._mdpolicy2mdtypes())
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1412, in _groupLoadRepoXML
    if self._commonLoadRepoXML(text):
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1225, in _commonLoadRepoXML
    if self._latestRepoXML(local):
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1194, in _latestRepoXML
    oxml = self._saveOldRepoXML(local)
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1053, in _saveOldRepoXML
    xml = self._parseRepoXML(old_local, True)
  File "/usr/lib/python2.6/site-packages/yum/yumRepo.py", line 1036, in _parseRepoXML
    return repoMDObject.RepoMD(self.id, local)
  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 1141, in cElementTree_iterparse
    _cElementTree_import()
  File "/usr/lib/python2.6/site-packages/yum/misc.py", line 1136, in _cElementTree_import
    import cElementTree
ImportError: No module named cElementTree

这个命令会再root下把yum用到的库路径写到yum.txt里,之后查看yum.txt


# grep libexpat.so.1 /root/yum.txt
open("/usr/local/lib/libexpat.so.1", O_RDONLY) = 8


我把/usr/local/lib 下 所有的libexpat都移动到其他地方,yum就可以正常使用了。后来又实验了一下

原来是有这些库的

libexpat.a  libexpat.la  libexpat.so  libexpat.so.0  libexpat.so.0.5.0  libexpat.so.1  libexpat.so.1.5.2

最后剩下

libexpat.a  libexpat.la  libexpat.so.0  libexpat.so.0.5.0 yum就可以正常使用了

其实全部删除/usr/local/lib 下expat库也是没问题的。应该是expat的库和yum不兼容造成的。







原创粉丝点击