我想安装Lxml,这样我就可以安装Scrapy了。

当我更新我的Mac今天,它不让我重新安装lxml,我得到以下错误:

In file included from src/lxml/lxml.etree.c:314:
/private/tmp/pip_build_root/lxml/src/lxml/includes/etree_defs.h:9:10: fatal error: 'libxml/xmlversion.h' file not found
#include "libxml/xmlversion.h"
         ^
1 error generated.
error: command 'cc' failed with exit status 1

我尝试使用brew安装libxml2和libxslt,两者都安装好了,但我仍然无法安装lxml。

上次安装时,我需要在Xcode上启用开发人员工具,但由于它更新到Xcode 5,它不再给我这个选项了。

有人知道我要做什么吗?


当前回答

以上这些在10.9.2中都不适用,因为编译时会出现以下错误:

clang: error: unknown argument: '-mno-fused-madd' 

这实际上导致了最干净的解决方案(详见[1]):

export CFLAGS=-Qunused-arguments
export CPPFLAGS=-Qunused-arguments

pip install lxml

如果全局安装,则跟随

sudo pip install lxml

[1] clang错误:未知参数:'-mno-fused-madd' (python包安装失败)

其他回答

从pip (lxml 3.6.4)成功安装后,我在导入lxml时得到一个错误。etree模块。

我无休止地寻找安装这个作为scrapy的必要条件,并尝试了所有的选项,但最终这对我来说是有效的(mac osx 10.11 python 2.7):

$ STATIC_DEPS=true sudo easy_install-2.7 "lxml==2.3.5"

lxml的旧版本似乎与etree模块一起工作。

Pip通常可以忽略包的指定版本,例如当您在Pip缓存中有较新的版本时,因此easy_install。'-2.7'选项适用于python版本,如果您安装的是python 3.x,则省略此选项。

在编译之前,将xmlversion.h的路径添加到您的环境中。

$ set INCLUDE=$INCLUDE:/private/tmp/pip_build_root/lxml/src/lxml/

但是要确保我提供的路径中有xmlversion.h文件。然后,

$ python setup.py install

这也困扰了我一段时间。我不太了解python distutils等的内部原理,但这里的include路径是错误的。我做了以下丑陋的hack,直到python lxml的人能做适当的修复。

sudo ln -s  /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2/libxml/ /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml

我在Yosemite上通过brew安装和链接libxml2和libxslt解决了这个问题:

brew install libxml2
brew install libxslt
brew link libxml2 --force
brew link libxslt --force

如果你已经用这个方法解决了问题,但它在稍后的时间再次弹出,你可能需要在上面的四行之前运行这个:

brew unlink libxml2
brew unlink libxslt

如果你在Homebrew上有权限错误,特别是在El Capitan上,这是一个有用的文档。基本上,不管OS X版本是什么,都可以尝试运行:

sudo chown -R $(whoami):admin /usr/local

在我的情况下,我必须在安装lxml之前关闭卡巴斯基防病毒:

pip install lxml