【问题标题】:Installing lxml with pip in virtualenv Ubuntu 12.10 error: command 'gcc' failed with exit status 4在 virtualenv Ubuntu 12.10 中使用 pip 安装 lxml 错误:命令“gcc”失败,退出状态为 4
【发布时间】:2013-04-15 12:03:54
【问题描述】:

尝试在 Ubuntu 12.10 x64 中的 virtualenv 中运行“pip install lxml”时出现以下错误。我有 Python 2.7。

我在这里看到了关于相同问题的其他相关问题,并尝试安装 python-dev、libxml2-dev 和 libxslt1-dev。

请查看从我提示命令到发生错误的那一刻的回溯。

下载/解压lxml 为包 lxml 运行 setup.py egg_info /usr/lib/python2.7/distutils/dist.py:267:用户警告:未知的分发选项:'bugtrack_url' 警告。警告(味精) 构建 lxml 版本 3.1.2。 没有 Cython 的建筑。 使用 libxslt 1.1.26 的构建配置 在以下目录中针对 libxml2/libxslt 构建:/usr/lib 警告:在目录 'src/lxml/tests' 下找不到匹配 '*.txt' 的文件 安装收集的包:lxml 为 lxml 运行 setup.py install /usr/lib/python2.7/distutils/dist.py:267:用户警告:未知的分发选项:'bugtrack_url' 警告。警告(味精) 构建 lxml 版本 3.1.2。 没有 Cython 的建筑。 使用 libxslt 1.1.26 的构建配置 在以下目录中针对 libxml2/libxslt 构建:/usr/lib 构建“lxml.etree”扩展 gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/libxml2 -I/home/admin/.virtualenvs/dev.actualito.com/build /lxml/src/lxml/includes -I/usr/include/python2.7 -c src/lxml/lxml.etree.c -o build/temp.linux-x86_64-2.7/src/lxml/lxml.etree.o src/lxml/lxml.etree.c:在函数'__pyx_f_4lxml_5etree__getFilenameForFile'中: src/lxml/lxml.etree.c:26851:7:警告:变量 '__pyx_clineno' 已设置但未使用 [-Wunused-but-set-variable] src/lxml/lxml.etree.c:26850:15:警告:变量 '__pyx_filename' 已设置但未使用 [-Wunused-but-set-variable] src/lxml/lxml.etree.c:26849:7:警告:变量 '__pyx_lineno' 已设置但未使用 [-Wunused-but-set-variable] src/lxml/lxml.etree.c:在函数'__pyx_pf_4lxml_5etree_4XSLT_18__call__'中: src/lxml/lxml.etree.c:138273:81:警告:从不兼容的指针类型传递“__pyx_f_4lxml_5etree_12_XSLTContext__copy”的参数 1 [默认启用] src/lxml/lxml.etree.c:136229:52:注意:预期的“struct __pyx_obj_4lxml_5etree__XSLTContext *”,但参数的类型为“struct __pyx_obj_4lxml_5etree__BaseContext *” src/lxml/lxml.etree.c:在函数'__pyx_f_4lxml_5etree__copyXSLT'中: src/lxml/lxml.etree.c:139667:79:警告:从不兼容的指针类型传递“__pyx_f_4lxml_5etree_12_XSLTContext__copy”的参数 1 [默认启用] src/lxml/lxml.etree.c:136229:52:注意:预期的“struct __pyx_obj_4lxml_5etree__XSLTContext *”,但参数的类型为“struct __pyx_obj_4lxml_5etree__BaseContext *” src/lxml/lxml.etree.c:在顶层: src/lxml/lxml.etree.c:12384:13:警告:“__pyx_f_4lxml_5etree_displayNode”已定义但未使用 [-Wunused-function] gcc:内部编译器错误:被杀死(程序 cc1) 请提交完整的错误报告, 如果合适,使用预处理的源。 有关说明,请参阅。 错误:命令“gcc”失败,退出状态为 4 命令的完整输出 /home/admin/.virtualenvs/dev.actualito.com/bin/python -c "import setuptools;__file__='/home/admin/.virtualenvs/dev.actualito.com/build/lxml/setup. py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-asDtN5-记录/安装-record.txt --single-version-externally-managed --install-headers /home/admin/.virtualenvs/dev.actualito.com/include/site/python2.7: /usr/lib/python2.7/distutils/dist.py:267:用户警告:未知的分发选项:'bugtrack_url' 警告。警告(味精) 构建 lxml 版本 3.1.2。 没有 Cython 的建筑。 使用 libxslt 1.1.26 的构建配置 在以下目录中针对 libxml2/libxslt 构建:/usr/lib 运行安装 运行构建 运行 build_py 复制 src/lxml/includes/lxml-version.h -> build/lib.linux-x86_64-2.7/lxml/includes 运行 build_ext 构建“lxml.etree”扩展 gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/libxml2 -I/home/admin/.virtualenvs/dev.actualito.com/build /lxml/src/lxml/includes -I/usr/include/python2.7 -c src/lxml/lxml.etree.c -o build/temp.linux-x86_64-2.7/src/lxml/lxml.etree.o src/lxml/lxml.etree.c:在函数'__pyx_f_4lxml_5etree__getFilenameForFile'中: src/lxml/lxml.etree.c:26851:7:警告:变量 '__pyx_clineno' 已设置但未使用 [-Wunused-but-set-variable] src/lxml/lxml.etree.c:26850:15:警告:变量 '__pyx_filename' 已设置但未使用 [-Wunused-but-set-variable] src/lxml/lxml.etree.c:26849:7:警告:变量 '__pyx_lineno' 已设置但未使用 [-Wunused-but-set-variable] src/lxml/lxml.etree.c:在函数'__pyx_pf_4lxml_5etree_4XSLT_18__call__'中: src/lxml/lxml.etree.c:138273:81:警告:从不兼容的指针类型传递“__pyx_f_4lxml_5etree_12_XSLTContext__copy”的参数 1 [默认启用] src/lxml/lxml.etree.c:136229:52:注意:预期的“struct __pyx_obj_4lxml_5etree__XSLTContext *”,但参数的类型为“struct __pyx_obj_4lxml_5etree__BaseContext *” src/lxml/lxml.etree.c:在函数'__pyx_f_4lxml_5etree__copyXSLT'中: src/lxml/lxml.etree.c:139667:79:警告:从不兼容的指针类型传递“__pyx_f_4lxml_5etree_12_XSLTContext__copy”的参数 1 [默认启用] src/lxml/lxml.etree.c:136229:52:注意:预期的“struct __pyx_obj_4lxml_5etree__XSLTContext *”,但参数的类型为“struct __pyx_obj_4lxml_5etree__BaseContext *” src/lxml/lxml.etree.c:在顶层: src/lxml/lxml.etree.c:12384:13:警告:“__pyx_f_4lxml_5etree_displayNode”已定义但未使用 [-Wunused-function] gcc:内部编译器错误:被杀死(程序 cc1) 请提交完整的错误报告, 如果合适,使用预处理的源。 有关说明,请参阅。 错误:命令“gcc”失败,退出状态为 4 -------------------------------------- 命令 /home/admin/.virtualenvs/dev.actualito.com/bin/python -c "import setuptools;__file__='/home/admin/.virtualenvs/dev.actualito.com/build/lxml/setup.py'; exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-asDtN5-record/install -record.txt --single-version-externally-managed --install-headers /home/admin/.virtualenvs/dev.actualito.com/include/site/python2.7 失败,错误代码 1 在 /home/admin/ .virtualenvs/dev.actualito.com/build/lxml 在 /home/admin/.pip/pip.log 中存储完整的日志

【问题讨论】:

  • 你安装了build-essential吗?
  • 是的,我刚刚运行了这个命令:sudo aptitude install build-essential,在其他事情之后这样做有问题吗?
  • 很容易检查 - pip uninstall lxml 然后 pip install lxml 看看结果是否不同。我想会的。
  • 我已经用 sudo 和 apt-get remove --purge 重新安装了 python-dev、libxml2-dev 和 libxslt1-dev 库,再次尝试将 pip install lxml 安装到 virtualenv 但错误代码是相同的和以前一样。
  • 恐怕我被难住了,对不起。

标签: python django gcc lxml


【解决方案1】:

确保您有足够的内存。尝试dmesg | tail 看看它是否输出如下内容:

...
[3778136.277570] Out of memory: Kill process 21267 (cc1) score 557 or sacrifice child
[3778136.277587] Killed process 21267 (cc1) total-vm:365836kB, anon-rss:336228kB, file-rss:0kB

【讨论】:

  • 这发生在我身上。我该怎么办?我不认为我可以获得更多内存 - 这是一个 VPS。
  • @SiddharthaRT:作为一种解决方法,您可以从官方 ubuntu 存储库安装 python-lxml 软件包,并使用 --system-site-packages 开关创建您的 virtualenv。
  • 您可以在文件中添加交换内存。看到这个link
  • 我在 lxmlAWS EB 上构建 docker 容器时遇到了同样的问题。 另一种解决方案:不要在云端构建,在本地构建并推送到存储库(可以是 Docker HubAWS Registry、.. .) 并使用已经烘焙的图像。
【解决方案2】:

这是我保存的笔记。

sudo apt-get install libxml2
sudo apt-get install libxslt1.1
sudo apt-get install libxml2-dev
sudo apt-get install libxslt1-dev
sudo apt-get install python-libxml2
sudo apt-get install python-libxslt1
sudo apt-get install python-dev
sudo apt-get install python-setuptools

easy_install lxml

它适用于我的 ubuntu 12.10

【讨论】:

  • 它最初没有用,但我绕过了这个问题。我发现,出于某种原因,它正在从系统安装的软件包中选择 easy_install。因此,如果我从源代码编译的 Python 版本显式运行 easy_install,它可以工作:) 例如:“/opt/python/2.7.5/bin/easy_install lxml”
  • easy_install vs pip install 成功了,对于我的 ubuntu 13.10 和 python 2.7。谢谢!
  • 我又遇到了同样的问题。这次使用 Python3。然后我决定写一个完整的答案。
  • 我找到了足够的以下内容:apt-get install libxml2-dev libxslt1-dev python-dev
  • @KoustuvSinha:这解决了我的问题:stackoverflow.com/questions/3373995/usr-bin-ld-cannot-find-lz
【解决方案3】:

根据 lxml 站点,您可以使用这样的构造:

CFLAGS="-O0"  pip install lxml

installation guide

全局安装注意事项: 使用 sudo 传递环境变量的正确方法是after sudo:

sudo CFLAGS="-O0" pip install lxml

【讨论】:

  • 这在 Ubuntu 14.04 上对我很有用,即使是低内存 (512MB),谢谢。
  • 为我工作,在发布我之前没有看到这个答案
  • 工作于ubuntu 16.04
【解决方案4】:

今天早上我遇到了类似的问题(错误:命令“gcc”失败,退出状态为 4)。看来您需要检查机器的内存。如果内存低于512M,可能是这个原因。尝试暂时关闭一些服务,如apache服务器,然后再次尝试“pip install lxml”。它可能工作!

【讨论】:

  • 增加内存就行了!我在一个具有 512MB RAM 的 DigitalOcean dokku droplet 中部署了一个 Django 应用程序,并且得到了error: command 'gcc' failed with exit status 4。将 droplet 的大小调整为 1GB RAM 解决了这个问题。
【解决方案5】:

我曾多次遇到过这个问题。

简答

Python2: $ python2.7 setup.py clean build --with-cython install
Python3: $ pip-3.3 install lxml

长答案

假设是pip install lxml 应该适用于所有环境,无论您使用的是 Python2 还是 Python3。

还有Cython 需要考虑:由于相关的性能提升,您一定会喜欢使用Cython 编译的lxml

由于我不知道的原因,Python2 上的编译找不到 Cython。 为了更准确和绝对明确地说明这个问题,下面的两个命令都不使用 Cython:

# DO NOT use these commands. I repeat: DO NOT use these commands.
$ pip-2.7 install lxml
$ easy_install-2.7 install lxml

因此,据我所知,在使用 Python2 时,您只有一种选择,那就是:从源代码编译,Luke!

# install build environment and dependencies
$ kernel_release=$( uname -r )
$ sudo apt-get install linux-headers-${kernel_release} build-essential -y
$ sudo apt-get install libxml2-dev libxslt1-dev -y

# Download from github and compile from sources
$ git clone --branch lxml-3.2.4 https://github.com/lxml/lxml
$ python2.7 setup.py clean build --with-cython install

【讨论】:

    【解决方案6】:

    对于 ubuntu 12.04 和虚拟环境:

    sudo apt-get install libxml2-dev libxslt-dev
    workon some-virt-env
    pip install lxml
    

    【讨论】:

      【解决方案7】:

      尝试通过设置 FLAGS 环境变量来禁用 C 编译器优化

      CFLAGS="-O0"  pip install lxml 
      

      不需要更多内存就可以解决我的问题

      【讨论】:

      • 谢谢!您的建议有助于我解决 AWS 微实例上的问题。
      猜你喜欢
      • 1970-01-01
      • 2016-04-21
      • 2016-11-01
      • 2017-10-05
      • 2011-11-11
      • 1970-01-01
      • 2018-09-21
      • 2016-04-18
      相关资源
      最近更新 更多