如何在不使用MacPorts或Fink的情况下在OS X Leopard上安装lxml?

38

我曾尝试过这样做并多次遇到问题。有没有人有一个确切可行的在OS X上安装lxml的方案,而不需要使用MacPorts或Fink?

最好提供完整的1-2-3步骤,下载和构建每个依赖项。

15个回答

35

感谢 Twitter 上的 @jessenoller 给出了符合我的需求的答案 - 你可以使用静态依赖编译 lxml,从而避免与 OS X 自带的 libxml2 发生冲突。以下是对我有效的方法:

cd /tmp
curl -O http://lxml.de/files/lxml-3.6.0.tgz
tar -xzvf lxml-3.6.0.tgz 
cd lxml-3.6.0
python setup.py build --static-deps --libxml2-version=2.7.3  --libxslt-version=1.1.24 
sudo python setup.py install

4
“cd libs/” 这一步对我来说失败了,但是它以及接下来的两个 wget 看起来是不必要的,因为它们会在 “setup.py build…” 步骤中作为副作用自动发生。 - fuzzyman
2
据我所知,wget不是OS X自带的。请使用curl -O替代。 - David Eyk
截至2010年4月6日,当使用所有3个最新版本(lxml 2.2.6、libxml 2.7.7、libxslt 1.1.26)时,此解决方案会失败。我收到了一个错误,其开头为: Undefined symbols for architecture i386: "_gzdirect", referenced from: ___xmlParserInputBufferCreateFilename in libxml2.a(xmlIO.o) - andyashton
这个问题有一个非常简单的解决方案:https://dev59.com/aHM_5IYBdhLWcg3wrFIt#6545556 - Andrei
如果您想在 virtualenv 中安装 lxml,请激活 virtualenv 并运行 "pip install -e .",而不是从最后一行运行 "sudo python setup.py install"。 - bmihelac
显示剩余4条评论

33

这对我有用(10.6.8):

sudo env ARCHFLAGS="-arch i386 -arch x86_64" easy_install lxml

我记不清了,但是大概意思是dylibs的架构错误。 - I82Much
嗨,我在10.6.8上运行了这个程序,看起来已经安装成功了,但是当我尝试在脚本中导入lxml时仍然失败了...你有什么想法吗?如果这更适合单独提一个问题,那我可以这样做。这是运行上面代码后输出的内容末尾: Installed /Library/Python/2.6/site-packages/lxml-2.3.3-py2.6-macosx-10.6-universal.egg Processing dependencies for lxml Finished processing dependencies for lxml,当我尝试导入时发生了这种情况: ImportError: No module named lxml - Stin
@Jay你试过chuckles建议的这个吗:https://dev59.com/aHM_5IYBdhLWcg3wrFIt#7850559? - Andrei
对我来说,在OS X 10.6.8上安装是可以的,但是安装后出现了问题。import lxml可以工作,但是import lxml.etree不行。相关链接:http://stackoverflow.com/questions/19557304/installing-lxml-on-mac-os-x-10-6-8-with-gcc-4-2和https://dev59.com/JmMm5IYBdhLWcg3wO9Eq#19613627。 - Sergey Orshanskiy
@SergeyOrshanskiy,你有没有找到关于lxml.etree扩展的可行解决方案? - ganicus
显示剩余4条评论

23

我使用Homebrew安装libxml2依赖库非常顺利:

brew install libxml2

Homebrew似乎没有提供libxslt,但我还没有需要使用XSLT。结果可能因人而异。

一旦你获取了这些依赖项,那么通常的方法就可以正常工作:

pip install lxml
或者
easy_install lxml

对我来说不起作用。我最终得到了错误:命令'gcc-4.2'失败,退出状态1。然而,上面的解决方案确实有效。 - Weston Ruter
在10.6上对我没用,但我设法使用https://dev59.com/aHM_5IYBdhLWcg3wrFIt#6545556进行安装。 - Andrei
3
在10.11上出现错误:命令'clang'执行失败,退出状态为1;解决方案是:xcode-select --install。 - Josep Valls
只是留在这里:我需要运行以下命令:brew install libxml2,然后是easy_install lxml,最后是easy_install scour,以便保存Inkscape文件。 - Prince

5

在El Capitan (10.11.1)上使用Homebrew (0.9.5),以下方法适用:

brew install libxml2
LD_FLAGS=-L/usr/local/opt/libxml2/lib CPPFLAGS=-I/usr/local/opt/libxml2/include/libxml2 pip install lxml

5

1
这个解决方案对我没用(OSX 10.6.8),但我找到了另一个:https://dev59.com/aHM_5IYBdhLWcg3wrFIt#6545556 - Andrei

3

谢谢,我漏掉了安装Xcode命令行工具的部分。这可以通过命令行完成: xcode-select --install - nyarasha

3

在OS X 10.9.1上,上面提供的建议在安装过程中出现错误--需要进行以下更改:

cd /tmp  
curl -o lxml-3.3.0.tgz http://lxml.de/files/lxml-3.3.0.tgz  
tar -xzvf lxml-3.3.0.tgz  
cd lxml-3.3.0  
python setup.py build --static-deps --libxml2-version=2.8.0  --libxslt-version=1.1.24  
sudo python setup.py install  

1
在10.9.2上,这会失败并显示如下错误: clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command-line-argument-hard-error-in-future] - EvanK

1

我使用的是OSX 10.11 El Capitan和Homebrew。使用pip install lxml会出现“致命错误:'libxml/xmlversion.h'文件未找到”和“失败,错误代码1”等问题。

根据官方网站的说明,我应该使用STATIC_DEPS=true pip install lxml(如果需要,请在pip之前添加sudo),这解决了我的问题。

在故障排除过程中,我运行了brew install libxml2brew install libxslt来安装依赖项。我不确定这两个命令是否必要。


1

我在Snow Leopard上已经成功运行了这个程序,但是在升级到Lion之后,我不得不将gcc-4.2链接到gcc。当我运行sudo env ARCHFLAGS="-arch i386 -arch x86_64" easy_install lxml时,它会寻找gcc-4.2而不是gcc。


0

要安装最新版本的libxml2和libxslt:

ARCHFLAGS="-arch i386 -arch x86_64" STATIC_DEPS=true pip install lxml

安装特定版本的库:

ARCHFLAGS="-arch i386 -arch x86_64" STATIC_DEPS=true LIBXML2_VERSION=2.7.3 LIBXSLT_VERSION=1.1.24 pip install lxml

CentOS 64位(有点离题,但很难得):

CFLAGS=-fPIC STATIC_DEPS=true pip install lxml

或者

CFLAGS=-fPIC STATIC_DEPS=true LIBXML2_VERSION=2.7.3 LIBXSLT_VERSION=1.1.24 pip install lxml

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