无法在 Mac OS X 10.9 上安装 Lxml

Posted

技术标签:

【中文标题】无法在 Mac OS X 10.9 上安装 Lxml【英文标题】:Cannot install Lxml on Mac OS X 10.9 【发布时间】:2013-11-02 02:27:44 【问题描述】:

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

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

【问题讨论】:

PS:如果您针对 Python3 的特定安装,我建议使用:pip3.4 install lxmlSTATIC_DEPS=true pip3.4 install lxml 命令(适应您的版本,bash TAB 完成是您的朋友);以便您为使用此/这些库的目标程序的特定版本安装。否则很容易花费 3000 万来为错误的解释器安装库 ;-) 请务必将正确答案标记为解决方案,以便其他人在遇到相同问题时可以将您的问题作为指导:) 【参考方案1】:

这也困扰了我一段时间。我对 python distutils 等的内部了解不够,但是这里的包含路径是错误的。我做了以下丑陋的黑客攻击来阻止我,直到 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

【讨论】:

【参考方案2】:

您可以通过在命令行上运行它来解决您的问题:

 STATIC_DEPS=true pip install lxml

它确实帮助了我。 关于docs的解释

【讨论】:

非常感谢。这为我节省了大量时间。 在 OSX 10.9.5 上运行良好 谢谢!在 macOS 10.14 上运行良好【参考方案3】:

您应该为 Xcode 安装或升级命令行工具。 在终端中试试这个:

xcode-select --install

【讨论】:

我收到“无法安装该软件,因为它当前无法从软件更新服务器获得。” 值得注意的是,您似乎收到“无法安装该软件,因为它当前无法从软件更新服务器获得”。当工具已经安装时。 关于如何手动检查是否安装的一些注意事项 - ***.com/a/20834890/255961 在 10.10.3 上运行良好。不知道为什么其他人需要操纵 cflags。 升级到 El Capitan (10.11) 后为我工作。【参考方案4】:

试试:

% STATIC_DEPS=true pip install lxml

或者:

% STATIC_DEPS=true sudo pip install lxml

有效!

【讨论】:

安德烈回答的副本。【参考方案5】:

我使用的是 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 的修复,但不会永久改变您的系统。

【讨论】:

【参考方案6】:

http://lxml.de/installation.html上的安装说明解释:

为了加快测试环境中的构建,例如在持续集成服务器上,通过设置 CFLAGS 环境变量禁用 C 编译器优化:

CFLAGS="-O0" pip install lxml

【讨论】:

对我来说完美无缺。 +1【参考方案7】:

在 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 error: unknown argument: '-mno-fused-madd' (python package installation failure)

【讨论】:

谢谢。这对我有帮助。希望答案有时可能包含有关操作系统版本的元数据。 如果全局安装,您可能需要/etc/sudoerssudo visudo 来保留环境变量。【参考方案8】:

OSX 10.9.2

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

【讨论】:

【参考方案9】:

全局安装... 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

【讨论】:

这对我有用,必须先使用以下命令更新 xcode 开发工具:xcode-select --install 这成功了。我已经安装了 xcode 命令行工具,但看起来需要更新。【参考方案10】:

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

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

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install lxml

【讨论】:

这只是禁用了未使用参数的硬错误,这是我在 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"【参考方案11】:

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

这是我的解决方案,

根据来自 lxml.de 的installing 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,它应该可以正常工作了。

【讨论】:

【参考方案12】:

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

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

如果您已经使用此方法解决了问题,但稍后再次弹出,您可能需要在上述四行之前运行此

brew unlink libxml2
brew unlink libxslt

如果您在使用 Homebrew 时遇到权限错误,尤其是在 El Capitan 上,this is a helpful document。本质上,不管 OS X 版本如何,尝试运行:

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

【讨论】:

最有用的答案。令人难以置信的是 xcode-select 如何获得如此多的选票。如果您使用的是 brew,那么您很久以前就已经进行了代码选择或安装了 xcode。 @MarcosEliziáriosantos xcode-select --install 中的“安装”一词有点误导。我发现从 Mavericks 升级到 Yosemite 后,我需要再次运行 xcode-select --install 才能升级到 Yosemite 的命令行工具。它(部分)解决了我遇到的问题,并且在任何情况下冗余运行都是无害的。 @MarcosEliziárioSantos 可能是因为最佳答案解决了大多数人的问题。这个解决方案是一种解决方法,但几秒钟后我遇到了与 libmemcache 类似的问题。最佳答案解决了这个问题。每个人都应该先尝试最佳答案后才考虑这种方法。 @MarcosEliziárioSantos 还有一件事 - 我正在使用 brew 但它是全新安装(我只通过 AppStore 安装了 XCode,这足以安装自制软件)。 另外,Homebrew 总是破坏我的权限。我使用了 Xcode 解决方案。【参考方案13】:

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

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

【讨论】:

我受够了自制软件在旧系统上造成的混乱,所以我发誓不会在新的 Yosemite 10.10.2 设置中使用它。我已经安装了整个 Xcode 包,所以我不需要xcode-select install。我下载了最新的 libxml2 和 libxlst 包(lxml 需要),但在安装它们之前,我想我会检查优胜美地是否已经在某个地方拥有这些文件。我创建了一个虚拟环境(使用 virtualenvwrapper),然后我做了pip install lxml,并且 lxml 安装没有错误。我通过抓取 google 的主页测试了 lxml,效果很好。【参考方案14】:

很遗憾,xcode-select --install 对我不起作用,因为我已经拥有最新版本。

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

【讨论】:

【参考方案15】:

我尝试了上述大多数解决方案,但没有一个对我有用。我正在运行 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。

【讨论】:

这个解决方案也适用于小牛队!如果您使用的是virtualenv,则不需要 sudo。 尽管以 sudo 运行命令,但我的仍在输出 OSError: [Errno 1] Operation not permitted: '/usr/bin/build'。有什么想法吗? @PLPeeters 您正在运行哪个版本的 python 以及哪个操作系统版本? 我正在使用 El Capitan 测试版(所以这是 10.11)并为此使用 Python 2.7。我猜这可能与 El Capitan 有关... 你是一个救生员。 El capitan 有效,在 virtualenv 中不需要 sudo。谢谢!【参考方案16】:

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

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

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

$ python setup.py install

【讨论】:

【参考方案17】:
xcode-select --install
sudo easy_install pip
sudo pip install lxml

【讨论】:

有趣的是,有些人需要sudo pip 安装,而其他人则不需要。 (我在直接运行 pip install 时遇到了权限问题,不得不使用 sudo。)我只能假设我在遥远的过去以 root 身份安装了一些与 python 相关的东西,它将某些(系统)文件夹创建为 root 而不是我自己。 这对我有用,我刚刚设置了一个新的 mac 工作,即使我安装了 XCode,我猜它没有安装命令行工具?无论如何,运行它,让它安装工具,然后重新运行 'pip3.4 install lxml --user' 工作,没有 sudo 或导出任何 shell 变量。 这在 virtualenv 中的 Yosemite 上完美运行。不过我不需要sudo @NoachMagedman 我正在安装到虚拟环境中,所以我不能使用 sudo。如果我使用 sudo,它会将其安装到我的全局 python 包中,这是我试图避免的。【参考方案18】:

pip 对我不起作用。我去了 https://pypi.python.org/pypi/lxml/2.3 并下载了 macosx .egg 文件:

https://pypi.python.org/packages/2.7/l/lxml/lxml-2.3-py2.7-macosx-10.6-intel.egg#md5=52322e4698d68800c6b6aedb0dbe5f34

然后使用命令行easy_install安装.egg文件。

【讨论】:

【参考方案19】:

使用 homebrew,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

【讨论】:

【参考方案20】:

这篇文章链接到对我有用的解决方案 Python3, lxml and "Symbol not found: _lzma_auto_decoder" on Mac OS X 10.9

【讨论】:

【参考方案21】:

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

【讨论】:

【参考方案22】:

在我的情况下,我必须在安装 lxml 之前关闭 Kaspersky Antivirus

pip install lxml

【讨论】:

【参考方案23】:

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

easy_install lxml

一切都很好。

【讨论】:

以上是关于无法在 Mac OS X 10.9 上安装 Lxml的主要内容,如果未能解决你的问题,请参考以下文章

在 OS X 10.9 (Mavericks) 上安装 Java

在 Mac OS X 10.9 上安装 PyLucene 时在符号索引中找不到 Atom

Java applet无法在Safari 7下打开文件(Mac OS X 10.9)

如何在 Mac OS X 10.9 上设置 JAVA_HOME 环境变量?

在 OS X Mavericks 10.9 上安装 apache 2.4

pip 在 Mac OS X Mavericks (10.9) 上引发 stdio.h not found 错误