Numpy: 错误:OS X + Python 3.3上的test_big_arrays(test_io.TestSavezLoad)

创建于 2013-10-03  ·  29评论  ·  资料来源: numpy/numpy

Piet van Oostrum在邮件列表中针对使用Python 3.3的OS X上的1.8.0rc1进行了报告:

======================================================================
ERROR: test_big_arrays (test_io.TestSavezLoad)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numpy/testing/decorators.py", line 146, in skipper_func
    return f(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numpy/lib/tests/test_io.py", line 149, in test_big_arrays
    np.savez(tmp, a=a)
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numpy/lib/npyio.py", line 530, in savez
    _savez(file, args, kwds, False)
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numpy/lib/npyio.py", line 589, in _savez
    format.write_array(fid, np.asanyarray(val))
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numpy/lib/format.py", line 417, in write_array
    fp.write(array.tostring('C'))
OSError: [Errno 22] Invalid argument
00 - Bug numpy.lib

最有用的评论

大家好,

您能否在最新版本的Python 3.6、3.7和3.8a中尝试此问题,因为我认为已通过此PR(https://github.com/python/cpython/pull/1705)在OSX上解决了该问题。

我还有一个2.7的PR,但是这个PR还没有准备好:/

感谢您的反馈意见。

所有29条评论

我可以重现这一点。 看起来像是Python 3.x错误。

import os
import sys
import time


if sys.maxsize > 2**32:
    print('64-bit')
else:
    print('32-bit, exiting')
    sys.exit(0)

fname = 'write_large_bytestring.txt'
tmp = open(fname, 'wb')
try:
    L = (1 << 31) + 100000
    tmp.write(b'abc' * 2**32)
finally:
    tmp.close()
    os.remove(fname)
    print('Elapsed time: %s s' % time.clock())

以上适用于Python 2.7,但不适用于3.3:

$ python tmp3.py 
64-bit
Elapsed time: 7.896957 s

$ python3.3 tmp3.py 
64-bit
Elapsed time: 50.149956 s
Traceback (most recent call last):
  File "tmp3.py", line 16, in <module>
    tmp.write(b'abc' * 2**32)
OSError: [Errno 22] Invalid argument

$ ulimit
unlimited

这两个Python都是从python.org上的dmgs安装的。 我在bugs.python.org上找不到这个问题,但是IIRC的io模块已被完全重写。

测试在gh-2942中推出。

也许这是另一个OSX I / O错误? 记住,OSX libc的bug很大,在处理接近2 ** 32的数据块时fwrite / fread有问题,我们必须在tofile / fromfile中解决这个问题...

无论如何,我们显然必须通过拆分写入来解决它
分成小块,对吧?

(即使最终是libc的错误,python可能也可以解决
它本身-可能有2.7的代码可以做到这一点,但在
过渡。)
2013年10月3日10:03,“ Pauli Virtanen” [email protected]写道:

也许这是另一个OSX I / O错误? 记住,OSX libc有错误并且具有
处理接近2 ** 32的数据块时fwrite / fread中的问题...

-
直接回复此电子邮件或在Gi tHub上查看它

回复:gh-574和gh-2806和gh-3473所涉及的OSX版本可能相关,也许它现在失败了,而不是像以前那样编写垃圾?

是的,我们可以通过分块解决它。 也许这个问题也应该转发给Python开发人员,以便他们也可以自己实现分块...

啊,忘了那些问题。 试图在我的10.6机器上进行测试,但是该脚本只是挂起了。 虽然可能是由于硬件,但它是一台古老的机器。

这是1.8.0阻止程序吗? 我将其放置在此处,以便不会忘记它,可以随时将其删除。 有人知道它是否适用于Python 3.2吗?

另外,IIRC,我们仅对读取进行了分块,可能是写入大文件的测试已损坏。

我不会为此发布保留它,这不是回归。 如果在发行前没有失败,请在1.8.x分支中将其标记为knownfail。

@rgommers仅在OSX和3.3上失败吗? 您说它适用于python 2.7,对吗?

它在2.7中不会失败,但是测试不会检查写入文件的内容是否正确。 可能不正确,请参阅Pauli链接的其他问题。

@rgommers所以OSX通常。 我会在1.9-devel中将其保持打开状态,以激发修复程序并提出问题。

据报告这在OS X Mavericks中已修复。 这可能无法解决,因为正确的解决方法是升级操作系统。

另请参阅#2931。

关闭,应由小牛修复。 如果问题仍然存在,请重新打开。

在Mavericks上,Anaconda的numpy 1.8.1和python 3.4(也是3.3)上,我仍然会遇到这种情况; 如果我注释掉skipif装饰器,则https://github.com/numpy/numpy/blob/v1.8.1/numpy/lib/tests/test_io.py#L154失败。

测试通过,并且使用Anaconda的python 2.7似乎可以正确加载数据。

这不一定是numpy的缺陷,但是其他人似乎正在解决此问题或类似问题,例如https://github.com/torch/torch7-distro/commit/40e65934e071e452f194a9d8c0fd740131babefa (用于读取而不是写入,但是我也无法在python 3上读取大文件。

在Mac OS X 10.9.4(Mavericks)上使用带numpy 1.8.1的Python 3.4运行测试用例会导致已知的OSError: [Errno 22] Invalid argument错误。 @certik请重新打开问题!

另一个数据点-使用OSX 10.9.5(Mavericks),我遇到了同样的问题。 我刚刚在python跟踪器中看到了这个错误: https :

还可以重新打开它。 我不知道Python解决它们的作用是否会解决,但我们会找出答案。

这里发生了最新的macOS,python(3.6)和numpy。

仅供参考,仍然在最新的macOS(10.12.6)和Python 3.5.2(Anaconda 4.2.0)上看到此错误。
有没有人想出块大小的上限?

同样也遇到此错误,macOS Sierra,python 3.6,numpy

在Python问题上似乎有一些动议,但也许我们应该继续进行并分块编写。

看来这不会很快在上游得到解决。 有人知道最新状态吗?

大家好,

您能否在最新版本的Python 3.6、3.7和3.8a中尝试此问题,因为我认为已通过此PR(https://github.com/python/cpython/pull/1705)在OSX上解决了该问题。

我还有一个2.7的PR,但是这个PR还没有准备好:/

感谢您的反馈意见。

@rgommers有机会测试吗? 欢迎就此当前状态提供任何其他反馈。

test_big_arrays测试通过,但是https://github.com/numpy/numpy/issues/3858#issuecomment -25607105对于Anaconda发行的最新Python 3.6仍然对我而言失败。 那可能没有CPython修复。 抱歉,现在没有时间自己构建Python。

@rgommers您可以重温吗?

据我所知,至少在Anaconda的Python 3.7中,这确实是固定的。 也没有其他报告,因此关闭。 谢谢大家,尤其感谢@matrixise解决此问题。

此页面是否有帮助?
0 / 5 - 0 等级