【问题标题】:Can't install lxml in python2.7python2.7无法安装lxml
【发布时间】:2014-12-09 22:04:39
【问题描述】:

我尝试使用 sudo pip install lxml 和 sudo pip install --upgrade lxml 在 vi​​rtualenv 中安装 lxml,但在这两种情况下都得到以下结果:

x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,
relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes    
-D_FORTIFY_SOURCE=2 -g -fstack-protector --param=ssp-buffer-size=4 -Wformat 
-Werror=format-security build/temp.linux-x86_64-2.7/src/lxml/lxml.etree.o -lxslt 
-lexslt -lxml2 -lz -lm -o build/lib.linux-x86_64-2.7/lxml/etree.so

/usr/bin/ld: cannot find -lz

collect2: error: ld returned 1 exit status
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

----------------------------------------
Cleaning up...
Command /usr/bin/python -c "import setuptools, 
tokenize;__file__='/tmp/pip_build_root/lxml/setup.py';
exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), 
__file__, 'exec'))" install --record /tmp/pip-nmFOYf-record/install-record.txt 
--single-version-externally-managed --compile failed with error code 1 in 
/tmp/pip_build_root/lxml
Storing debug log for failure in /root/.pip/pip.log

我已经尝试了所有发布的解决方案here,这意味着我安装了libxml2-dev、libxslt-dev 和python-dev,我还安装了build-essential
我目前正在运行基于 Linux Mint 17 Debian,它使用 apt-get 作为包管理器。
python-lxml 已经预安装。

【问题讨论】:

  • 你为什么在 virtualenv 中使用sudo?您是否以root身份创建了virtualenv?如果是这样,为什么?或者您是否尝试将其安装到系统站点包中,即使您在 virtualenv 中?如果是这样,为什么不从 virtualenv 之外进行呢?
  • @abarnert 好吧,我第一次没有sudo,然后我尝试全局安装lxml,但没有成功。
  • 只是随机混合使用和不使用 sudo 的 virtualenv 和全局安装只会导致破坏的 virtualenv 与搞砸的权限。不要那样做。
  • 仅供参考,您无需编辑标题即可说“已解决”。只需标记一个接受的答案(您已经完成)就足够了。
  • 另外,将来,对于与安装相关的问题,请在您的问题中提供有关您平台的信息,最好是作为标签。如果你一开始就有 Linux Mint 标签,我可以直接告诉你sudo apt-get install zlib1g-dev,而不是试图抽象地解释你需要使用你的平台的安装程序来安装你的平台的 zlib 开发包。跨度>

标签: python python-2.7 lxml linux-mint


【解决方案1】:

lxml 依赖于各种 C 库,您必须安装这些 C 库——包括它们的开发文件(头文件、.so 或.a 库等)——才能构建lxml。 installation 文档解释了在特定平台上构建所需的先决条件。


这个错误:

/usr/bin/ld: cannot find -lz

... 表示您缺少的先决条件是libz,也就是zlib。

由于您不在 Windows 上,因此您实际上根本没有 zlib 的可能性极小……但您没有 zlib 的开发文件是很合理的。在某些平台上,尤其是许多 linux 发行版上,软件包通常被分成单独的部分。例如,运行时需要的zlib 的部分可能在一个名为zlib 的包中,而构建其他需要zlib 的程序所需的部分则在一个名为zlib-dev 或zlib-devel 的包中。具体细节取决于您的具体平台。

话虽如此,如果您没有zlib 开发文件,您可能也没有libxml2 或libxslt 开发文件,因为我不知道任何安装这些文件的平台也不会拉入zlib 文件。

无论如何,由于您没有告诉我们您是哪个平台(和发行版,如果是 linux),我不知道要使用哪个包管理器、包的名称等,但是请适合您的平台的任何内容。


还有:

我已经安装了python-lxml

你真的不应该用你的发行版的包管理器和pip来安装同一个包;这是迷惑自己的好方法。

但无论如何,您很可能是从二进制包安装python-lxml,而不是从源代码,这意味着您不需要构建要求。现在您正在尝试从源代码构建它,这意味着您可以这样做。

【讨论】:

  • 感谢您的早期回答,我尝试使用 pip 和包管理器(apt-get)安装的原因是因为第一个(pip)对我不起作用,所以我尝试安装python-lxml,但它是预安装的。在我尝试安装lxml之前,我还安装了libxml2和libxslt。
  • @helado:但是您是否安装了libxml2-dev 和libxslt-dev,正如安装文档和这个答案所解释的那样?
  • 如果你的意思是 sudo apt-get install libxml2-dev libxslt-dev python-dev 如文档所说,那么是的,我就是这样做的。
  • 我第一次在 Debian 上遇到此错误...感谢您的帮助!
【解决方案2】:

在基于 ubuntu 的 linux 发行版上,您可以使用:

sudo apt-get install zlib1g-dev

【讨论】:

  • 我遇到了同样的问题。这个命令解决了这个问题。感谢@helado 和 kguest。
猜你喜欢
  • 2017-07-30
  • 2019-07-21
  • 2016-01-20
  • 1970-01-01
  • 2015-10-23
  • 2014-01-20
  • 1970-01-01
  • 1970-01-01
  • 2016-08-22
相关资源
最近更新 更多