【发布时间】: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 并使其工作以为就是这样。
之后在运行 matplotlib 时,方法 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