2012-10-22 68 views
61

注意:我正在使用virtualenvwrapper。为什么我不能使用`pip install lxml`在virtualenv中工作?

之前激活虚拟环境:

$ 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

我以某种方式未能看出这是一个特定的编程问题。恕我直言,这属于http://www.serverfault。com –

+4

@MarkusWMahlberg Virtualenv是一个非常常见的Python实用程序,主要由程序员在开发过程中使用,而不是在部署过程中由系统管理员使用。 lxml非常流行,这种类型的问题并不罕见。我认为这是根据“程序员常用的软件工具”的标准进行的主题。 –

+0

@JeremyBanks我很清楚virtualenv。但我认为我们有一个相当环境相关的问题,并且在serverfault上获得有用答案的机会应该更高。 –

回答

110

你可能已经在你的系统,也许是安装在已安装LXML由于系统包。因此,第一次尝试(没有活动virtualenv的pip install lxml)不会失败,但它也不会安装它;它确实没有做任何事情。

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

lxml包含需要编译才能正确安装的C模块。但是,这些C模块的编译依赖于您已经安装了一些“开发库”。这些开发库是C库,而不是Python,因此pip将无法自动从互联网获取并为您安装。

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

apt-get install libxml2-dev libxslt-dev 

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

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

参见:How to install lxml on Ubuntu

+1

'成功安装lxml'谢谢!我很好奇,如果你知道一个地方将必要的标题映射到各种(流行的)Python包。我也有其他问题。另外,apt-get python-dev只能获得标准库的头文件吗? –

+3

最好的选择:搜索谷歌头文件丢失,希望其他人有同样的问题。另外,是的,python-dev只会为标准库获取标题。 libxml2-dev与python无关:libxml2是一个C库,你恰好在使用python库来处理。这就是为什么当你安装python-dev时没有安装它。否则,您基本上需要安装世界上现有的每个C库,以确保您拥有所有需要使所有Python库(如lxml)工作的头文件,而无需额外的步骤。 –

+0

正确的金钱,谢谢很多! – EvertW

18

为CentOS用户: 得到时:

error: command 'gcc' failed with exit status 1

DO:

sudo yum install libxslt-devel libxml2-devel 
5

如果您已经安装在系统级lxml,并希望将其迁移到您未使用0123创建的,你可以将它链接到你的virtualenvdist-packages文件夹中。

外面的virtualenv,在Python外壳:

import lxml 
print lxml.__file__ 

在我而言,这是一个在/usr/lib/python2.7/dist-packages找到。将会有一个lxml文件夹和egg-info文件。无论你的virtualenv在哪里,进入它的/lib/python-x.y/dist-packages文件夹(您可能需要创建dist-packages),并将库文件夹和蛋符号链接到它。

相关问题