为什么我不能让`pip install lxml`在virtualenv中工作?


70

注意:我正在使用virtualenvwrapper。

激活虚拟环境之前:

$ pip install lxml
Requirement already satisfied (use --upgrade to upgrade): lxml in /usr/lib/python2.7/dist-packages  
Cleaning up...  

激活虚拟环境后:

(test-env)$ pip install lxml
force/build/lxml/src/lxml/includes/etree_defs.h:9:31: fatal error: 
libxml/xmlversion.h: No such file or directory

compilation terminated.

error: command 'gcc' failed with exit status 1

----------------------------------------
Command /home/chaz/dev/envs/test-with-system-python-force/bin/python2
.7 -c "import setuptools;__file__='/home/chaz/dev/envs/test-with-
system-python-force/build/lxml/setup.py';exec(compile(open(__file__).
read().replace('\r\n', '\n'), __file__, 'exec'))" install --record 
/tmp/pip-bJ6Q_B-record/install-record.txt --single-version-externally
-managed --install-headers /home/chaz/dev/envs/test-env/include/site/python2.7 failed with error code 1 in 
/home/chaz/dev/envs/test-env/build/lxml
Storing complete log in /home/chaz/.pip/pip.log

1
我以某种方式看不到这是一个特定的编程问题。恕我直言,这属于serverfault.com
Markus W Mahlberg 2015年

4
@MarkusWMahlberg Virtualenv是一种极为常见的Python实用程序,主要在开发过程中供程序员使用,而在部署过程中则不供系统管理员使用。lxml非常流行,这种类型的问题并不罕见。我认为这是以“程序员常用的软件工具”为标准的主题。
杰里米

@JeremyBanks我很了解virtualenv。但是我认为我们有一个与环境相关的问题,在serverfault上获得有用答案的机会应该更多。
Markus W Mahlberg 2015年

Answers:


130

您可能已经在系统上安装了lxml,可能是由于系统软件包而安装的。因此,第一次尝试(pip install lxml没有活动的virtualenv)不会失败,但是也不会安装它。它真的什么也没做。

在virtualenv中,默认情况下,系统软件包将被忽略。因此,pip认为未安装lxml。因此,它尝试将其安装到您的虚拟环境中。

lxml包含C模块,需要对其进行编译才能正确安装。但是,这些C模块的编译取决于您是否已经安装了一些“开发库”。这些开发库是C库,而不是Python,因此pip无法自动从Internet上获取它们并为您安装它们。

因此,您将需要自己安装这些开发库,最有可能使用软件包管理器。在Debian系统(例如Ubuntu)中,这是...

apt-get install libxml2-dev libxslt-dev

这会将libxml2和libxslt开发库安装到本地系统。如果您再次尝试安装lxml,则C模块编译步骤应该可以工作,因为现在这些开发库都在您的系统上。

您收到的错误消息是由于缺少这些库(libxml/xmlversion.h: No such file or directory错误消息的一部分)。

另请参阅:如何在Ubuntu上安装lxml


1
Successfully installed lxml 谢谢!我很好奇,如果您知道将必要的标头映射到各种(流行的)Python包的地方。我也有其他问题。另外,apt-get python-dev是否仅获取标准库的标头?
Brian Dant 2012年

3
最好的选择:在google中搜索缺少的头文件,希望其他人也遇到同样的问题。另外,是的,python-dev只为您提供标准库的标头。libxml2-dev与python无关:libxml2是一个C库,您刚巧使用python库进行处理。这就是为什么在安装python-dev时未安装它的原因。否则,您基本上将需要安装世界上现有的每个C库,以确保拥有所有头文件,而这些头文件使每个python库(例如lxml)能够正常工作而无需执行其他步骤
Mark Hildreth 2012年

1
嗨!如果我无法安装开发人员怎么办?我不是计算机的管理员,我现在非常需
要这样做

@ozama我建议您在一个新问题中描述您的情况,以供其他人回答。
2014年

19

对于centos用户: 获得时:

错误:命令“ gcc”失败,退出状态为1

做:

sudo yum install libxslt-devel libxml2-devel

5

如果您已lxml在系统级别进行安装,并且想要将其迁移到virtualenv未使用来创建的--system-site-packages,则可以将其符号链接到virtualenvdist-packages文件夹中。

在外部virtualenv,在python shell中:

import lxml
print lxml.__file__

就我而言,它位于中/usr/lib/python2.7/dist-packages。将有一个lxml文件夹和egg-info文件。无论您的virtualenv在哪里,都进入其/lib/python-x.y/dist-packages文件夹(您可能需要创建dist-packages),然后将库文件夹和egg符号链接到其中。


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.