无法在Mac OS X 10.9上安装Lxml


234

我想安装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,因此不再提供该选项。

有人知道我需要做什么吗?


3
PS:如果您要针对Python3进行特定安装,则建议使用:pip3.4 install lxmlSTATIC_DEPS=true pip3.4 install lxml命令(适应您的版本,bash TAB完成是您的朋友);这样您就可以安装使用此/这些库的目标程序的特定版本。否则,很容易花费3000万美元为错误的解释器安装lib ;-)
Phil L.14年

3
确保将正确答案标记为解决方案,以便其他人在遇到相同问题时可以将您的问题用作指导:)
Parker

Answers:


500

您应该为xcode安装或升级命令行工具。在终端上尝试一下:

xcode-select --install

24
我收到“无法安装软件,因为当前无法从软件更新服务器获得该软件。”
kelorek 2013年

7
值得注意的是,您似乎会收到“由于软件更新服务器当前不可用而无法安装该软件”。工具已经安装时。
wombat 2014年

-如何手动检查是否安装了他们的几个注意事项stackoverflow.com/a/20834890/255961
studgeek

1
在10.10.3。上工作正常。不知道为什么其他人需要操纵标志。
陈冠宇

1
升级到El Capitan(10.11)后为我工作。
卢卡斯

193

我通过安装和链接libxml2以及libxslt通过brew 在优胜美地上解决了这个问题:

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

24
最有用的答案。令人难以置信的是,xcode-select如何获得如此多的选票。如果您使用的是brew,很久以前您已经进行了代码选择或安装xcode。
MarcosEliziárioSantos 2014年

5
@MarcosEliziárioSantos中的“安装”一词xcode-select --install有点误导。我发现从小牛升级到优胜美地后,我需要xcode-select --install再次运行以升级到优胜美地的命令行工具。它(部分地)解决了我遇到的问题,并且在任何情况下重复运行都是无害的。
Noach Magedman,2015年

2
@MarcosEliziárioSantos可能是因为最佳答案可以解决大多数人的问题。此解决方案是一种解决方法,但几秒钟后我遇到了libmemcache的类似问题。最佳答案解决了该问题。每个人都应该在首先尝试了最佳答案后才考虑使用此方法。
拉法尔Es 2015年

@MarcosEliziárioSantos还有一件事-我正在使用brew,但它是全新安装(我只有通过AppStore安装的XCode,足以安装自制软件)。
拉法尔(Rafal Es)2015年

而且,自制软件总是会破坏我的权限。我使用了Xcode解决方案。
sudo 2015年


48

我尝试了上面的大多数解决方案,但没有一个对我有用。我正在运行Yosemite 10.10,唯一适用于我的解决方案是在终端中键入以下内容:

sudo CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2 CFLAGS=-Qunused-arguments CPPFLAGS=-Qunused-arguments pip install lxml

编辑:如果您使用virtualenv,则不需要开头的sudo。


1
该解决方案也适用于Mavericks!如果您使用的virtualenv是不需要sudo。
毛罗·巴拉里迪

OSError: [Errno 1] Operation not permitted: '/usr/bin/build'尽管以sudo运行命令,我的仍在输出。有任何想法吗?
PLPeeters

@PLPeeters您正在运行哪个版本的python,以及哪个操作系统版本?
robinsj 2015年

我使用的是El Capitan beta版(即10.11),为此使用了Python 2.7。我猜想这可能与El Capitan有关...
PLPeeters

您是救生员。El capitan可以在virtualenv中工作,不需要sudo。谢谢!
jacoor 2015年

24

这也困扰了我一段时间。我对python distutils等的内部知识不了解,但是这里的include路径是错误的。我进行了以下丑陋的修改,直到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

19

全局安装... OS X 10.9.2

xcode-select --install
sudo easy_install pip
sudo CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2 CFLAGS=-Qunused-arguments CPPFLAGS=-Qunused-arguments pip install lxml

1
这对我
有用

这成功了。我已经安装了xcode命令行工具,但是看起来需要更新。
史蒂文·默卡特


11

上面的这些在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] lang错误:未知参数:'-mno-fused-madd'(python软件包安装失败)


谢谢。这帮助了我。希望答案有时可能包含有关os版本的元数据。
frankV

如果全球安装,您可能需要/etc/sudoerssudo visudo保护环境变量。
swandog 2014年

10
xcode-select --install
sudo easy_install pip
sudo pip install lxml

有趣的是,有些人需要sudo安装pip,而其他人则不需要。(我在直接运行pip install时遇到权限问题,必须使用sudo。)我只能假设我在很远的过去以root用户身份安装了与python相关的东西,从而以root身份而不是我自己的身份创建了某些(系统)文件夹。
Noach Magedman,2015年

这对我有用,我刚刚安装了一个新的Mac即可工作,即使我安装了XCode,我猜它也没有安装命令行工具?无论如何,运行它,让它安装工具,然后重新运行'pip3.4 install lxml --user'即可,没有sudo或导出任何shell变量。
mgrandi

这在虚拟环境中对优胜美地非常有效。不过我不需要sudo
2015年

@NoachMagedman我正在安装到虚拟环境中,因此无法使用sudo。如果我使用sudo,它将安装到我的全局python包中,这是我要避免的方法。
Esteban

6

Yosemite通过运行以下命令解决了这个问题:

xcode-select install #this may take several minutes.
pip install lxml

我有足够的自制软件在旧系统上创建混乱的事物,因此我发誓不要在新的Yosemite 10.10.2设置中使用它。我已经安装了整个Xcode软件包,因此不需要xcode-select install我。我下载了最新的libxml2和libxlst软件包(lxml必需),但是在安装它们之前,我想我会检查Yosemite是否已经在某些地方拥有这些文件了。我创建了一个虚拟env(使用virtualenvwrapper),然后执行了操作pip install lxml,lxml安装成功。我通过抓取Google主页测试了lxml,效果很好。
2015年

4

对于自制软件,libxml2被隐藏以不干扰系统libxml2,因此必须对pip有所帮助才能找到它。

用bash:

LDFLAGS=-L`brew --prefix libxml2`/lib CPPFLAGS=-I`brew --prefix libxml2`/include/libxml2 pip install --user lxml

与鱼:

env LDFLAGS=-L(brew --prefix libxml2)/lib CPPFLAGS=-I(brew --prefix libxml2)/include/libxml2 pip install --user lxml

2

OSX 10.9.2

sudo env ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future STATIC_DEPS=true pip install lxml

2

我尝试了此页面上的所有答案,但没有一个对我有用。我正在运行OS X版本10.9.2

但这绝对有效....就像一个魅力:

ARCHFLAGS = -Wno-error =未使用的命令行参数-将来的硬错误pip install lxml


1
这只是禁用了未使用参数的硬错误,这在OS X Mavericks上的许多其他库编译期间遇到过。我发现将行添加到bash配置文件中很有用,因此不必每次遇到时都查找它:export ARCHFLAGS="-Wno-error=unused-command-line-argument-hard-error-in-future"或者您可以像这样显式添加架构类型:export ARCHFLAGS="-arch x86_64 -arch i386 -Wno-error=unused-command-line-argument-hard-error-in-future"
Michiel Kauw-A-Tjoe

2

不幸的是xcode-select --install,由于我已经拥有最新版本,因此不适用于我。

这很奇怪,但是我通过打开XCode并接受条款与条件解决了这个问题。重新运行pip install lxml后未返回任何错误。


1

从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,则忽略此选项。


1

就我而言,在通过以下方式安装lxml之前,必须关闭Kaspersky Antivirus

pip install lxml

0

我正在使用OSX 10.9.2,但出现相同的错误。

XCode命令行工具的安装不适用于此特定版本的OSX。

我认为解决此问题的更好方法是使用以下命令进行安装:

$ CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2 pip install lxml

这类似于jdkoftinoff的修复程序,但不会永久更改系统。


0

我遇到了同样的问题,经过几天的工作,我在OS X 10.9.4上使用Python 3.4.1解决了这个问题。

这是我的解决方案,

根据从lxml.de 安装lxml

lxml的macport可用。尝试类似port install py25-lxml的操作

如果您没有MacPort,请从MacPort.org安装它。这很容易。您可能还需要编译器来安装XCode编译工具,使用xcode-select --install

首先,我通过将该端口更新为最新版本sudo port selfupdate

然后我输入sudo port install libxml2,几分钟后,您应该看到libxml2安装成功。可能您可能还需要libxslt安装lxml。要安装libxslt,请使用:sudo port install libxslt

现在,只需键入pip install lxml,它应该可以正常工作。


0

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

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

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

$ python setup.py install



0

在头发多撕裂和咬牙切齿之后,我用pip卸载了xcode并运行:

easy_install lxml

一切都很好。


-1

尝试:

% STATIC_DEPS=true pip install lxml

要么:

% STATIC_DEPS=true sudo pip install lxml

有用!


与安德烈的答案重复。
2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.