CentOS 6.3上的Python lxml etree

3 投票
2 回答
4737 浏览
提问于 2025-04-17 13:38

我在服务器上装的是Centos 6,最近想安装一些软件包(模块)。我把在Windows上下载的模块通过ftp客户端放到了/usr/lib/python2.6/site-packages这个文件夹里,但当我运行我的脚本时,其中一个模块lxml却报错了:

File "plugins/util/http.py", line 12, in <module>
    from lxml import etree, html
  File "/usr/lib/python2.6/site-packages/lxml/html/__init__.py", line 12, in <module>
ImportError: cannot import name etree

同样的代码在Windows 7和Linux Ubuntu 10.04上运行得很好。

有没有人知道为什么会出现这个错误?我什么都没改,只是把模块从Windows移动到了我的VPS上的python2.6目录里。

@root:

>>> import lxml;print lxml
<module 'lxml' from '/usr/lib/python2.6/site-packages/lxml/__init__.pyc'>
>>>

@ig

gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include/libxml2 -I/tmp/pip-build/lxml/src/lxml/includes -I/usr/include/python2.6 -c src/lxml/lxml.etree.c -o build/temp.linux-i686-2.6/src/lxml/lxml.etree.o

无法执行gcc:没有那个文件或目录

错误:命令'gcc'失败,退出状态为1

2 个回答

1

lxml 不是一个纯粹的 Python 模块。它主要是用 Cython 写的,因此会编译成本地代码。你在 Windows 机器上下载的二进制文件和 CentOS(以及一般的 Linux)不兼容。

最好的办法是按照 安装 lxml 的说明 来操作,也就是安装 libxslt-devellibxml2-devel 这两个包,然后用 pip 来编译 lxml,或者你也可以自己手动编译。如果选择自己编译,可以参考之前的一个问题,里面有一些有用的信息,还有 lxml 网站上的更多资料。


安装

我没有 CentOS 机器来测试这个。最简单的安装方法是通过 ip,应该可以通过 Yum 作为一个包来获取。如果不行,你可以使用以下命令来安装(这些命令来自 distribute 的文档,这是 pip 的一个前置条件):

curl -O http://python-distribute.org/distribute_setup.py
python distribute_setup.py
easy_install pip

接下来,只需运行:

pip install lxml

这样就应该能顺利安装。

如果你想跳过 pip(不过,最终来说,使用 pip 管理依赖关系会简单很多,所以还是值得使用的)

  1. PyPI 上找到合适版本的 lxml
  2. 从下载链接下载源代码(应该是一个 tar.gz 文件)
  3. 使用 tar -xzf lxml-<version>.tar.gz 解压这个 tar 压缩包
  4. 进入解压后的目录,运行 python setup.py install

请注意,上述任何命令可能需要以 root 用户身份运行,如果你的安装只能被 root 修改。安装命令包括 python distribute_setup.pyeasy_install pippython setup.py install

6

或者从EPEL安装(这是最简单的方法):

# install EPEL if you don't have it yet
sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# instal python-lxml
sudo yum -y install python-lxml

撰写回答