Python3.3を搭載したOSXの1.8.0rc1に対して、メーリングリストのPiet vanOostrumによって報告されました。
======================================================================
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
これを再現できます。 Python3.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())
上記はPython2.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にはバグがあり、tofile / fromfileで回避する必要があった2 ** 32に近いデータブロックを処理するときにfwrite / freadに問題があることを忘れないでください...
いずれにせよ、書き込みを分割して回避する必要があることは明らかです。
小さな塊になりますよね?
(それが最終的にlibcのせいであるとしても、Pythonはおそらく回避する必要があります
それ自体-おそらく2.7にはこれを行うためのコードがありましたが、
遷移。)
2013年10月3日10:03、「PauliVirtanen」 [email protected]は次のように書いています。
それとも、これは別のOSX I / Oバグですか? OSX libcにはバグがあり、
2 ** 32に近いデータブロックを処理するときのfwrite / freadの問題...—
このメールに直接返信するか、Gi tHubhttps://github.com/numpy/numpy/issues/3858#issuecomment-25607852で表示してください
。
Re: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でのみ失敗した場合はどうなりますか? あなたはそれがPython2.7で動作すると言います、それは正しいですか?
2.7では失敗しませんが、テストではファイルに書き込まれた内容が正しいかどうかはチェックされません。 正しくない可能性があります。Pauliがリンクした他の問題を参照してください。
@rgommersつまり、OSX全般です。 修正の動機付けと問題を開くために、1.9-develでは開いたままにしておきます。
これは、OS XMavericksで修正されたと報告されています。 適切な修正はOSをアップグレードすることであるため、これはおそらく修正されません。
#2931も参照してください。
クロージング、マーヴェリックスが修正する必要があります。 問題が解決しない場合は、再度開いてください。
これは、Anacondaのnumpy1.8.1とpython3.4(これも3.3)を使用するMavericksでまだ発生しています。 skipif
デコレータをコメントアウトすると、 https://github.com/numpy/numpy/blob/v1.8.1/numpy/lib/tests/test_io.py#L154が失敗します。
テストに合格し、Anacondaのpython 2.7を使用して、データが正しく読み込まれているように見えます。
これは必ずしもnumpyの欠陥ではありませんが、 https :
Mac OS X 10.9.4(Mavericks)でnumpy1.8.1を使用してPython3.4を使用してテストケースを実行すると、既知のOSError: [Errno 22] Invalid argument
エラーが発生します。 @certik問題を再開してください!
別のデータポイント-OSX10.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の問題については動きがあるように見えますが、おそらく先に進んで書き込みをチャンクする必要があります。
これはすぐにアップストリームで修正される予定はないようです。 誰もが最新のステータスを知っていますか?
こんにちは、みんな、
このPR(https://github.com/python/cpython/pull/1705)でOSXの問題を修正したと思うので、Python 3.6、3.7、3.8aの最後のバージョンでこの問題を試してみてください。
2.7用の他のPRがありますが、これはまだ準備ができていません:/
ご意見ありがとうございます。
@rgommersこれをテストできるチャンスはありますか? これの現在の状況に関する他のフィードバックは大歓迎です。
test_big_arrays
テストは合格ですが、 https: //github.com/numpy/numpy/issues/3858#issuecomment -25607105は、Anacondaが出荷する最新のPython3.6ではまだ失敗します。 ただし、おそらくCPythonの修正はありません。 申し訳ありませんが、今すぐPythonを自分でビルドする時間はありません。
@rgommersこれを再訪できますか?
これは、少なくともAnacondaのPython 3.7では、私が知る限り修正されています。 他の報告もありませんので、締めくくります。 皆さん、特にこれを修正してくれた@matrixiseに感謝します。
最も参考になるコメント
こんにちは、みんな、
このPR(https://github.com/python/cpython/pull/1705)でOSXの問題を修正したと思うので、Python 3.6、3.7、3.8aの最後のバージョンでこの問題を試してみてください。
2.7用の他のPRがありますが、これはまだ準備ができていません:/
ご意見ありがとうございます。