CentOS 6.3 上的 Python lxml etree

Posted

技术标签:

【中文标题】CentOS 6.3 上的 Python lxml etree【英文标题】:Python lxml etree on CentOS 6.3 【发布时间】:2013-01-09 05:42:10 【问题描述】:

我的服务器上有 Centos 6,我一直在尝试为其安装一些软件包(模块)。我刚刚将 Windows 上的那些带到了/usr/lib/python2.6/site-packages 中的 ftp 客户端,但是当我运行其中一个脚本时 - 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,编辑了我的第一篇文章。 当您尝试从解释器中导入 etree 时,您是否遇到相同的错误?或者,如果您将在解释器中使用的同一行添加到脚本的开头,它会打印相同的结果吗? @root,是的,它仍然给我上面的错误。 【参考方案1】:

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

最好的办法是按照on installing lxml 的说明进行操作,即安装libxslt-devellibxml2-devel 软件包并使用pip 编译lxml 或自己手动编译。如果您自己编译,there's a previous question 提供一些有用的信息和更多信息,请访问 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 使管理依赖项变得容易得多,所以值得这样做)

    在PyPI 上找到合适的lxml 版本 从下载地址下载源码(应该是tar.gz文件) 使用tar -xzf lxml-&lt;version&gt;.tar.gz解压tar存档 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 或我自己编译它?你能告诉我如何自己编译它,从来不用处理这样的东西.. 感谢您提供的信息,我使用 pip 完成了它,因为它看起来更简单一些,但我仍然遇到一些错误。我编辑了我的第一篇文章,因为它使我的评论太长了。我想安装差不多完成了,我做了所有应该做的事情。【参考方案2】:

或者从 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

【讨论】:

以上是关于CentOS 6.3 上的 Python lxml etree的主要内容,如果未能解决你的问题,请参考以下文章

zabbix 2.2.2在centos 6.3 x86_64上的安装

如何在没有Internet的情况下升级CentOS 6.3上的开发人员工具?

CentOS6.8安装Python3.6.3

lxml 用于 Qpython3(Android 上的 Python3)

centos6.5编译安装python3.6.3和cx_oracle

centos6.5编译安装python3.6.3和cx_oracle