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

Bri*_*ant 69 python virtualenv virtualenvwrapper

注意:我正在使用virtualenvwrapper.

在激活虚拟环境之前:

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

激活虚拟环境后:

(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
Run Code Online (Sandbox Code Playgroud)

Mar*_*eth 124

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

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

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

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

apt-get install libxml2-dev libxslt-dev
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 最好的选择:搜索谷歌搜索丢失的头文件,希望其他人遇到同样的问题.此外,是的,python-dev只能获取标准库的标题.libxml2-dev与python无关:libxml2是一个C库,你碰巧正在使用python库来处理它.这就是安装python-dev时没有安装的原因.否则,您基本上需要安装世界上存在的每个C库,以确保您拥有使每个python库(例如lxml)无需额外步骤所需的所有头文件 (3认同)

ela*_*ver 18

对于centos用户: 获取时:

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

做:

sudo yum install libxslt-devel libxml2-devel
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您已lxml在系统级别安装,并希望将其迁移到virtualenv您未创建的那个--system-site-packages,则可以将其符号链接到您virtualenvdist-packages文件夹中.

在你的外面virtualenv,在python shell中:

import lxml
print lxml.__file__
Run Code Online (Sandbox Code Playgroud)

在我的情况下,它被发现了/usr/lib/python2.7/dist-packages.将有一个lxml文件夹和egg-info文件.无论你的virtualenv在哪里,进入它的/lib/python-x.y/dist-packages文件夹(你可能需要创建dist-packages),并将库文件夹和egg符号链接到它.