在CentOS 6.3上使用Python lxml etree

3

我在我的服务器上安装了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


import lxml; print lxml 打印什么? - root
@root,我编辑了我的第一篇帖子。 - RewriteRule
当您尝试从解释器导入etree时,是否会出现相同的错误?或者,如果您将在解释器中使用的相同行添加到脚本开头,它是否会打印相同的结果? - root
@root,是的,它仍然给我上面的错误。 - RewriteRule
2个回答

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

1

lxml不是一个纯Python模块。它主要使用Cython编写,因此编译为本地代码。来自Windows机器的二进制文件与CentOS(以及Linux一般)不兼容。

您最好按照安装lxml的说明操作,即安装libxslt-devellibxml2-devel软件包,并使用pip编译lxml或手动编译。如果您选择手动编译,有一个先前的问题提供了一些有用的信息和有关lxml网站的更多信息。


安装

我没有CentOS机器进行测试。最简单的安装方法是通过Yum包安装ip。如果没有,您可以使用以下命令进行安装(来自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. 从下载URL下载源代码(应该是一个tar.gz文件)
  3. 使用tar -xzf lxml-<version>.tar.gz提取tar存档
  4. cd进入提取的目录并运行python setup.py install

请注意,如果您的安装仅可由root修改,则可能需要作为root运行上述任何命令。安装命令是python distribute_setup.pyeasy_install pippython setup.py install


软件包 libxml2-devel-2.7.6-8.el6_3.4.i686 已经安装并且是最新版本。 软件包 libxslt-devel-1.1.26-2.el6_3.1.i686 已经安装并且是最新版本。好的,现在我所要做的就是使用 pip 或者自己编译它?你能告诉我如何自己编译它吗?我以前从没遇到过这样的东西。 - RewriteRule
谢谢提供的信息,我用pip做了,因为它看起来更简单,但仍然出现了一些错误。我编辑了我的第一篇帖子,因为它让我的评论太长了。我猜安装工作已经快完成了,我按照该做的一切都做了。 - RewriteRule

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接