【问题标题】:Segmentation fault (core dumped) with numpy in cygwincygwin中的numpy分段错误(核心转储)
【发布时间】:2022-01-05 17:00:17
【问题描述】:

几天前在 cygwin 中运行 numpy 时,我得到了这个:

$ python3.8
>>> import numpy
>>> numpy.random.random(20)
Segmentation fault (core dumped)
$

问题实际上是由不同的 numpy 方法引起的,但这是同一问题的一个更简单的实例。请注意,消息是由 python 打印出来的,然后再退出到 bash。

我设法通过(在 python 虚拟环境中)将 numpy 从版本 1.21.4 降级到 1.20.3 并使其工作以为就是这样。

之后在运行 ma​​tplotlib 时,方法 figure.tight_layout() 失败并以完全相同的方式打印出相同的 Segmentation fault (core dumped)message。我在启用faulthandler 的情况下运行它并得到了这个:

[...]
  File "/home/user/.pyvenv8/lib/python3.8/site-packages/numpy/core/_methods.py", line 43 in _amin
  File "/usr/lib/python3.8/site-packages/matplotlib/path.py", line 633 in get_extents
  File "/usr/lib/python3.8/site-packages/matplotlib/axis.py", line 2089 in _update_label_position
  File "/usr/lib/python3.8/site-packages/matplotlib/axis.py", line 1105 in get_tightbbox
  File "/usr/lib/python3.8/site-packages/matplotlib/axes/_base.py", line 4619 in get_tightbbox
  File "/usr/lib/python3.8/site-packages/matplotlib/tight_layout.py", line 82 in _auto_adjust_subplotpars
  File "/usr/lib/python3.8/site-packages/matplotlib/tight_layout.py", line 320 in get_tight_layout_figure
  File "/usr/lib/python3.8/site-packages/matplotlib/figure.py", line 3197 in tight_layout
Segmentation fault (core dumped)
$

显然 numpy 再次导致了问题(除非您有更好的意见)。 根据输出,第 43 行是导致问题的原因

41  def _amin(a, axis=None, out=None, keepdims=False,
42            initial=_NoValue, where=True):
43      return umr_minimum(a, axis, None, out, keepdims, initial, where)

以下是同一问题的另一个实例,它也指向 numpy。

  File "/usr/lib/python3.8/site-packages/numpy/core/arrayprint.py", line 898 in fillFormat
  File "/usr/lib/python3.8/site-packages/numpy/core/arrayprint.py", line 894 in __init__
  File "/usr/lib/python3.8/site-packages/numpy/core/arrayprint.py", line 375 in <lambda>
  File "/usr/lib/python3.8/site-packages/numpy/core/arrayprint.py", line 434 in _get_format_function
  File "/usr/lib/python3.8/site-packages/numpy/core/arrayprint.py", line 501 in _array2string
  File "/usr/lib/python3.8/site-packages/numpy/core/arrayprint.py", line 475 in wrapper
  File "/usr/lib/python3.8/site-packages/numpy/core/arrayprint.py", line 698 in array2string
  File "/usr/lib/python3.8/site-packages/numpy/core/arrayprint.py", line 1447 in _array_repr_implementation

并且错误追溯到:

896      def fillFormat(self, data):
897          # only the finite values are used to compute the number of digits
898          finite_vals = data[isfinite(data)]

也许值得一提的是,我在不同的系统(hp 笔记本电脑 [ZBook])中以完全相同的方式安装了 cygwin,并且一切都按预期工作,在这里我将它安装在 ThinkPad (L15) 中。

感谢您的帮助。

【问题讨论】:

  • 你试过用 python3.8 代替 python3 吗? alternatives --display python3 的输出是什么?
  • 或许你可以试试python.org的python版本,看看是否有同样的问题。
  • @matzeri 我很抱歉我的笨拙,我忘了澄清python3实际上是python3.8的别名,而python3.8又在cygwin文件中,所以我认为这不是问题,很遗憾。

标签: python bash numpy matplotlib cygwin


【解决方案1】:

在 Cygwin 64 位上使用

$ cygcheck -c python38 python38-numpy
Cygwin Package Information
Package              Version        Status
python38             3.8.12-1       OK
python38-numpy       1.21.4-1       OK

您的代码只需稍作改动即可工作

$ python3.8
Python 3.8.12 (default, Nov 23 2021, 20:18:25)
[GCC 11.2.0] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.random.random(20)
array([0.23053439, 0.62286076, 0.26295642, 0.40334288, 0.93366687,
       0.3700992 , 0.32926097, 0.25258836, 0.66502201, 0.00174633,
       0.6095529 , 0.19894018, 0.08591355, 0.92748402, 0.24237812,
       0.24362117, 0.04083416, 0.64795586, 0.74237742, 0.92671093])

如果这不是结果,或者您有安装问题或其他东西干扰了这两个包。

支持的正确位置是 cygwin 邮件列表
https://cygwin.com/problems.html

运行 cygcheck -s -v -r > cygcheck.out 并包含该文件作为 报告中的附件。请不要压缩或以其他方式编码 输出。只需将其作为纯文本文件附加,以便它可以 易于查看。

【讨论】:

  • 我将按照您建议的问题提交给 cygwin 以获取支持。谢谢@matzeri 的帮助。
猜你喜欢
  • 1970-01-01
  • 2015-06-25
  • 2021-06-03
相关资源
最近更新 更多