为啥我不能让 `pip install lxml` 在 vi​​rtualenv 中工作?

Posted

技术标签:

【中文标题】为啥我不能让 `pip install lxml` 在 vi​​rtualenv 中工作?【英文标题】:Why can't I get `pip install lxml` to work within a virtualenv?为什么我不能让 `pip install lxml` 在 vi​​rtualenv 中工作? 【发布时间】:2012-10-12 18:21:52 【问题描述】:

注意:我使用的是 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

【问题讨论】:

我不知何故看不出这是一个特定的编程问题。恕我直言,这属于serverfault.com @MarkusWMahlberg Virtualenv 是一个非常常见的 Python 实用程序,主要由程序员在开发期间使用,而不是由系统管理员在部署期间使用。 lxml 非常流行,这种类型的问题并不罕见。我认为这是“程序员常用的软件工具”标准下的话题。 @JeremyBanks 我很了解 virtualenv。但我认为我们有一个与环境相关的问题,在 serverfault 上获得有用答案的机会应该更大。 【参考方案1】:

您可能已经在系统上安装了 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 部分)。

另请参阅:How to install lxml on Ubuntu

【讨论】:

Successfully installed lxml 谢谢!我很好奇您是否知道将必要的标头映射到各种(流行的)Python 包的地方。我和其他人也有问题。另外,apt-get python-dev 是否​​只获取标准库的标头? 最好的选择:在谷歌搜索丢失的头文件,希望其他人也有同样的问题。另外,是的,python-dev 只会为您获取标准库的标头。 libxml2-dev 与 python 无关:libxml2 是一个 C 库,您碰巧正在使用 python 库来使用它。这就是安装 python-dev 时没有安装它的原因。否则,您基本上需要安装世界上存在的每个 C 库,以确保您拥有使每个 python 库(例如 lxml)无需额外步骤即可工作所需的所有头文件 嗨!如果我无法安装开发人员怎么办?我不是这台机器的管理员,我现在非常需要这个......谢谢 @ozama 我建议您在一个新问题中描述您的情况,以便其他人回答。【参考方案2】:

对于 centos 用户: 获取时:

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

做:

sudo yum install libxslt-devel libxml2-devel

【讨论】:

【参考方案3】:

如果您在系统级别安装了lxml,并且想要将其迁移到不是您使用--system-site-packages 创建的virtualenv,您可以将其符号链接到您的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 符号链接到其中。

【讨论】:

【参考方案4】:

您最有可能在寻找这个: Microsoft Visual C++ 14.0 is required (Unable to find vcvarsall.bat)

查找 Visual Studio 网站并进入: 底部的“Visual Studio 工具”,单击展开。 选择顶部“Build Tools for Visual Studio 2017”旁边的下载。

【讨论】:

嗯,OP 显然使用的是 Unix 或 Linux 的某个版本,而不是 Microsoft Windows……

以上是关于为啥我不能让 `pip install lxml` 在 vi​​rtualenv 中工作?的主要内容,如果未能解决你的问题,请参考以下文章

pip install lxml失败原因

conda/pip 为啥现在国内镜像不能用了

linux 安装python第三方库lxml

python lxml库怎么安装

python怎么安装lxml html 解析器

已解决Encountered error while trying to install package.> lxml