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

注意:我正在使用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 

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

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

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

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

 apt-get install libxml2-dev libxslt-dev 

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

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

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

对于centos用户:当得到:

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

做:

 sudo yum install libxslt-devel libxml2-devel 

如果您在系统级别安装了lxml ,并且希望将其迁移到您未使用--system-site-packages创build的virtualenv ,则可以将其链接到virtualenvdist-packages文件夹中。

virtualenv之外,在一个python shell中:

 import lxml print lxml.__file__ 

在我的情况下,它在/usr/lib/python2.7/dist-packagesfind。 将会有一个lxml文件夹和egg-info文件。 无论你的virtualenv在哪里,进入它的/lib/python-xy/dist-packages文件夹(你可能需要创builddist-packages ),然后将库文件夹和egg都链接到它。