繁体   English   中英

安装包时的Python pip segfault

[英]Python pip segfault when installing package

Python 2.7.6 (default, Oct 21 2014, 13:39:51) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-55)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

在我们运行 Centos 5.4 的旧旧服务器上一直遇到这个问题。

异常信息:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/pip-1.5.6-py2.7.egg/pip/basecommand.py", line 122, in main
    status = self.run(options, args)
  File "/usr/local/lib/python2.7/site-packages/pip-1.5.6-py2.7.egg/pip/commands/install.py", line 278, in run
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
  File "/usr/local/lib/python2.7/site-packages/pip-1.5.6-py2.7.egg/pip/req.py", line 1229, in prepare_files
    req_to_install.run_egg_info()
  File "/usr/local/lib/python2.7/site-packages/pip-1.5.6-py2.7.egg/pip/req.py", line 325, in run_egg_info
    command_desc='python setup.py egg_info')
  File "/usr/local/lib/python2.7/site-packages/pip-1.5.6-py2.7.egg/pip/util.py", line 697, in call_subprocess
    % (command_desc, proc.returncode, cwd))
InstallationError: Command python setup.py egg_info failed with error code -11 in /tmp/pip_build_root/macs2

有任何想法吗? 最初我以为是 python 版本问题,但我从 2.7.1 升级到 2.7.6 仍然遇到同样的错误。

点子列表:

numpy (1.9.0)
pip (1.5.6)
setuptools (7.0)
wsgiref (0.1.2)

-Edit 当我卸载并使用 numpy 版本 1.4.0 时返回相同的错误但代码为 1。

(gdb) 运行 setup.py install --user 启动程序:/usr/local/bin/python2.7 setup.py install --user 警告:在 0x2aaaaaaab000 添加的符号文件系统提供的 DSO 中找不到可加载部分 >> >[启用使用 libthread_db 进行线程调试]
程序收到信号 SIGSEGV,分段错误。 append_metastr_to_string (meta=0x20, skip_brackets=0, ret=0x2aaaaf29e1e8) at >numpy/core/src/multiarray/datetime.c:1965 1965 if (meta->base == NPY_FR_GENERIC) {

这是由 wget 完成的,然后解压球

我在阅读帖子标题后遇到了这个问题,因为我自己也遇到了这个问题。 在这里为任何未来的读者展示我的案例和解决方案。

问题

我的工作流程如下所示:

$ pip install simplejson
Collecting simplejson
Installing collected packages: simplejson
Successfully installed simplejson
Segmentation fault (core dumped)

解决方案

因为我在这个系统上有 root 权限,所以我尝试做一个类似的流程,但作为另一个用户,它成功通过,没有任何问题。 我认为这与我的用户主管有关,因此我擦除了我的.local文件夹

$ rm -rf ~/.local/lib/python*

上面相同的工作流程现在成功通过了,尽管有一个点子警告,正如大多数人所知,这并不重要。

$ pip install simplejson
Collecting simplejson
Installing collected packages: simplejson
Successfully installed simplejson
You are using pip version 8.1.1, however version 19.0.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

可能的原因

当我尝试使用简单的用户权限来回退我的用户帐户时,我强制安装了pip ,它会用.local文件夹中的一个覆盖/usr/bin/pip中的系统 pip。 然后我从我的.local文件夹中手动删除了 pip 的二进制文件,这个问题开始出现。 在我看来,我的用户帐户中仍然有一些对pip包的引用。 当您同时使用多个 python 版本并像我一样手动删除任何二进制文件时,也可能发生这种情况。

添加--no-binary :all:似乎对我有用。

所以你的新命令应该是这样的:

pip install <module> --no-binary :all:

我知道这有点晚了,但我希望这会有所帮助

当我尝试通过pippip3安装 Python 包时,我也遇到了收到段错误消息的pip3 所以我对这个问题进行了一些研究和阅读。

网上常见的问题解决方案

经常有些文件好像坏了,可以通过删除缓存、重建一个venv或者重新安装相应的包来解决。

解决方案注意事项

在一个地方,我发现了一条微不足道的评论,但它引导我解决了我的问题:

当您遇到分段错误时,这意味着计算机正在尝试访问内存中的受限区域。

我排除了pip命令故意试图访问错误的内存区域的可能性,我很快得出硬件有缺陷的结论。 因此,我使用memtest86+从实时映像启动 PC,该映像也集成在 Linux 发行版的许多映像中。 在那里我可以在短时间内看到大量错误。

我的解决方案

我的一个 RAM 模块有故障,所以这是硬件缺陷。

更换内存后,问题解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM