Numpy: RuntimeErrorimplement_array_functionメ゜ッドにはすでにdocstringがありたす

䜜成日 2019幎08月28日  Â·  20コメント  Â·  ゜ヌス: numpy/numpy

コヌド䟋の再珟

from flask import Flask

import numpy

app = Flask(__name__)

uwsgiアプリケヌションずしお。

完党な環境 https 

゚ラヌメッセヌゞ

|> test_bot_1                 | [uWSGI] getting INI configuration from /config/uwsgi.ini
|> test_bot_1                 | *** Starting uWSGI 2.0.18 (64bit) on [Wed Aug 28 00:25:33 2019] ***
|> test_bot_1                 | compiled with version: 6.3.0 20170516 on 04 May 2019 16:28:22
|> test_bot_1                 | os: Linux-4.4.0-75-generic #96-Ubuntu SMP Thu Apr 20 09:56:33 UTC 2017
|> test_bot_1                 | nodename: 2dd932a7998b
|> test_bot_1                 | machine: x86_64
|> test_bot_1                 | clock source: unix
|> test_bot_1                 | pcre jit disabled
|> test_bot_1                 | detected number of CPU cores: 8
|> test_bot_1                 | current working directory: /app
|> test_bot_1                 | detected binary path: /usr/local/bin/uwsgi
|> test_bot_1                 | your processes number limit is 1048576
|> test_bot_1                 | your memory page size is 4096 bytes
|> test_bot_1                 | detected max file descriptor number: 1048576
|> test_bot_1                 | lock engine: pthread robust mutexes
|> test_bot_1                 | thunder lock: disabled (you can enable it with --thunder-lock)
|> test_bot_1                 | uwsgi socket 0 bound to UNIX address /sockets/bots/test_bot.sock fd 3
|> test_bot_1                 | Python version: 3.6.8 (default, Mar 27 2019, 08:49:59)  [GCC 6.3.0 20170516]
|> test_bot_1                 | *** Python threads support is disabled. You can enable it with --enable-threads ***
|> test_bot_1                 | Python main interpreter initialized at 0x55b90bbdc100
|> test_bot_1                 | your server socket listen backlog is limited to 100 connections
|> test_bot_1                 | your mercy for graceful operations on workers is 60 seconds
|> test_bot_1                 | mapped 1239640 bytes (1210 KB) for 16 cores
|> test_bot_1                 | *** Operational MODE: preforking ***
|> test_bot_1                 | WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x55b90bbdc100 pid: 1 (default app)
|> test_bot_1                 | mounting main.py on /test_bot
|> test_bot_1                 | Traceback (most recent call last):
|> test_bot_1                 |   File "main.py", line 3, in <module>
|> test_bot_1                 |     import numpy
|> test_bot_1                 |   File "/usr/local/lib/python3.6/site-packages/numpy/__init__.py", line 142, in <module>
|> test_bot_1                 |     from . import core
|> test_bot_1                 |   File "/usr/local/lib/python3.6/site-packages/numpy/core/__init__.py", line 17, in <module>
|> test_bot_1                 |     from . import multiarray
|> test_bot_1                 |   File "/usr/local/lib/python3.6/site-packages/numpy/core/multiarray.py", line 14, in <module>
|> test_bot_1                 |     from . import overrides
|> test_bot_1                 |   File "/usr/local/lib/python3.6/site-packages/numpy/core/overrides.py", line 47, in <module>
|> test_bot_1                 |     """)
|> test_bot_1                 | RuntimeError: implement_array_function method already has a docstring

Numpy / Pythonのバヌゞョン情報

新しくむンストヌルされたnumpy 、2019-08-28。

57 - Close?

最も参考になるコメント

numpyをnumpy == 1.15.4にダりングレヌドするこずで、うたくいきたした。

党おのコメント20件

かなりのテストの埌、それはuwsgi内で実行されるこずに関連しおいるず確信しおいたす。

これは挠然ずしたベルを鳎らしたす。 IIRC uwsgiは、 -OO実行するなど、ある皮のdocstring操䜜を実行したす。

これは、Pythonコン゜ヌルにIPythonを䜿甚するSpyderでも発生したす。 「ナヌザヌモゞュヌルリロヌダヌ」ず呌ばれる手法があり、「PythonたたはIPythonコン゜ヌルでファむルを実行するずきにむンポヌトされたモゞュヌルをPythonに匷制的にリロヌドさせたす」。 基本的にこれはdel sys.modules[modname]たす。

numpyをむンポヌトするスクリプトを実行しようずするず、で終わるスタックトレヌスが衚瀺されたす。

[...]
numpyをnpずしおむンポヌト

ファむル "C\ Program Files \ Python35 \ lib \ site-packagesnumpy \ __ init__。py"、行142、
から 。 コアのむンポヌト

ファむル "C\ Program Files \ Python35 \ lib \ site-packagesnumpy \ core \ __ init __。py"、17行目
から 。 マルチアレむのむンポヌト

ファむル「C\ ProgramFiles \ Python35 \ lib \ site-packagesnumpy \ core \ multiarray.py」、14行目
から 。 むンポヌトオヌバヌラむド

ファむル「C\ ProgramFiles \ Python35 \ lib \ site-packagesnumpy \ core \ overrides.py」、47行目
"" "

RuntimeErrorimplement_array_functionメ゜ッドにはすでにdocstringがありたす

私にも起こりたすDjangoサヌバヌ

  File "/opt/project/consensx/graph/values_graph.py", line 2, in <module>
    import matplotlib.pyplot as plt
  File "/pyroot/lib/python3.7/site-packages/matplotlib/__init__.py", line 138, in <module>
    from . import cbook, rcsetup
  File "/pyroot/lib/python3.7/site-packages/matplotlib/cbook/__init__.py", line 31, in <module>
    import numpy as np
  File "/pyroot/lib/python3.7/site-packages/numpy/__init__.py", line 142, in <module>
    from . import core
  File "/pyroot/lib/python3.7/site-packages/numpy/core/__init__.py", line 17, in <module>
    from . import multiarray
  File "/pyroot/lib/python3.7/site-packages/numpy/core/multiarray.py", line 14, in <module>
    from . import overrides
  File "/pyroot/lib/python3.7/site-packages/numpy/core/overrides.py", line 47, in <module>
    """)
RuntimeError: implement_array_function method already has a docstring

Python 7.3.7
numpy1.17.2

ここでの本圓の問題は、NumPyがプロセスでの再初期化をサポヌトしおいないこずです。 これは2012幎からgh-665に戻りたす。これを解決するには、構造䜓で䜜成するすべおのグロヌバル状態を泚意深くキャプチャし、モゞュヌルのゲッタヌを介しおそれにアクセスする必芁がありたす。

ああ、グロヌバル。 それらはい぀も楜しいです。

numpyをnumpy == 1.15.4にダりングレヌドするこずで、うたくいきたした。

numpyをnumpy == 1.15.4にダりングレヌドするこずで、うたくいきたした。

このバヌゞョンのnumpy1.15.4は、魔女バヌゞョンのパンダで動䜜したすか
パンダの堎合1.0.3 =
ValueError: numpy.ufunc size changed, may indicate binary incompatibility. Expected 216 from C header, got 192 from PyObject

他の質問、このバグはすぐに修正されるず思いたすか

ありがずう。

他の質問、このバグはすぐに修正されるず思いたすか

「このバグ」ずは、numpyの削陀ず再むンポヌトを蚱可するこずを意味する堎合、答えは「ロヌドマップに含たれおいたせん」です。 これはオヌプン゜ヌスであるため、誰でも修正に貢献できたすが、かなり倧芏暡な䜜業になりたす。

むンポヌトの譊告しかない堎合は、無芖しおかたいたせん。 しかし、私はあなたがuwsgiを䜿甚しおいるず思いたす...

これがuwsgiによるものである堎合、私はそれをサポヌトしないずいう答えしかありたせん。あなたはこれに非垞に倧きな努力を払わなければならないでしょう。 珟時点では、 Pythonのすべおがこれをサポヌトしおいるわけではありたせんが、い぀か機胜するこずを挠然ず期埅しお取り組んでいたす。 しかし、私たちにこの仕事をするように頌むこずは、単にどこにも行きたせん。 確かに、あなたは状況を改善するために時間ずお金を投資しようずするこずができたす、それは歓迎されたす、しかしあなたの垌望を䞊げないでください。

Pythonは圌らの最埌に䞀緒に自分の事を取埗した埌、これは、しばらく時間がかかるこずがあり、圌らは䜕幎
珟時点では、私の知る限り、wsgiが行うこずず基本的に互換性のないパブリックAPIがありサブむンタヌプリタヌを䜿甚、おそらく必芁な最適化されたキャッシュがいく぀かありたすが、私の知る限り、Python

事実、wsgiがデフォルトで䜿甚するサブむンタヌプリタヌは、劥圓なサむズのC拡匵システムではサポヌトされおいたせん。 そしお、これは予芋可胜な将来には起こりたせん。 そしお、誰かがこれをNumPyロヌドマップの重芁なこずだず考えたり期埅したりするず、私の意芋では、Python開発者は圌らのシグナルを間違えたしたそしお私はそう蚀った、そしおそれはそこで認められおいるようでした。 サブむンタヌプリタヌはC拡匵機胜の倧郚分でひどく倱敗するず想定する必芁があるこず、䞭期今埌数幎に状況が倉化するこずを誰も期埅しおはならないこず、そしお基本的にこの機胜は実隓的なものであるこずを党員に䌝える必芁があるためです。 C拡匵機胜のサポヌトになりたす。

はい、倚くのPythonコア開発者は物事を機胜させる方向に進んでいたすが、NumPyなどのプロゞェクトの芳点からは、サブむンタヌプリタヌwsgiのデフォルトのサポヌトは、Python2からPython3ぞの移行よりも簡単ではありたせん。朜圚的なナヌザヌであり、珟圚、すべおを適切にサポヌトするテクノロゞヌすらありたせん。

だから、この暎蚀の埌...誰かがNumPyをサブむンタヌプリタヌでより良く機胜させるために努力を費やしたいのであれば、これを閉じたす。それは高貎な努力です。 そしお、私は間違っおいるこずが蚌明されおうれしいです...しかし、私はサブむンタヌプリタヌwsgiが実隓的で機胜的であるず芋なされなければならないずいう点に立っおい

ええず、私たちはサブむンタヌプリタヌを気にしないこずに完党に同意したすずにかくが、これはより単玔な問題です-1.15.4で機胜し、Django、Spyderなどのレポヌトにはuwsgi含たれおいたせん。 __array_function__のdocstring添付ファむルを簡単に倉曎したす。

本圓はそれらを逃した。 そこにもあるのだろうか...その文脈ではかなり安党なはずです。 うたくいけば、メモリリヌクのみが発生するずいう意味で。 少なくずも、CPythonがC-extensionモゞュヌルがそれを安党に実装しおいるず蚀うためのより倚くの機械を取埗するたで、SpyderがC-extensionモゞュヌルをスキップするべきではないかどうかただ少し疑問です...そしおそれでも、ほずんどのC-extensionモゞュヌルはリロヌドしたすおそらくほずんど䜕もしたせん。

それでも、ほずんどのC拡匵モゞュヌルでは、リロヌドはおそらくほずんど䜕もしたせん。

それがポむントだずは思いたせん。 Pythonパッケヌゞの䞀郚ずしおコンパむルされた拡匵機胜がぶら䞋がっおいる堎合は、詊しおみる前に理解するよりも、 reload(any_module)ず蚀う方がはるかに簡単です。

Djangoが正確に䜕をするかはわかりたせんが、おそらく䌌おいたす。

私はあなたをあたり苛立たせたくありたせんでした。

私はFlaskずNumpyを䜿甚するWebサヌビスを持っおいたすが、私だけではないず思いたす。
Flaskに含たれおいる開発サヌバヌ確かにWerkzeugに゚ラヌはありたせん。

実際、本番環境では、Python3甚のapache2 WSGIモゞュヌルを䜿甚しおいたす。これにより、負荷を保持できたす耇数のスレッド

私は開いおいたす、䜕を䜿うべきか教えおください

どうもありがずうございたす。

サブむンタヌプリタヌの段萜にあるものはすべお、NumPyに関しお適切なアドバむスである必芁がありたす。 Webサヌビスで䜕が機胜するかに぀いおアドバむスするこずはできたせんが、このスレッドの他の誰かがアドバむスできるかもしれたせん。

状況を少し良くするこずは良いかもしれないそしおいく぀かを助けるかもしれないが、予芋可胜な将来の深い問題を解決しないこずを明確にしたかっただけです。 いずれにせよ、私たちはこの倱敗を取り陀こうずするかもしれないず思いたすが、代わりにこれがデバッグの困難な問題に぀ながる可胜性があるずいう倧きな譊告を出したす。

たぶんそれは前に蚀及されなかったので誰かを助けるでしょう
私はuwsgi Nginxを䜿甚を䜿甚しおおり、 " single-interpreter = true " ini configたたは--single-interpreter switchがこの問題を解決したした。

ここで私はこのフラグの説明を芋぀けたした

デフォルトでは、uWSGIは、Pythonが最初に初期化されたずきに䜜成されたメむンのPythonむンタヌプリタヌではなく、プロセスのサブむンタヌプリタヌ内でPythonコヌドを実行したす。 これは、耇数の個別のPython Webアプリケヌションを1぀のプロセス内で実行できるようにするために行われたすが、盞互に干枉しないように十分に分離する必芁がありたす。 ただし、スレッドを有効にしおサブむンタヌプリタヌを䜿甚するず、叀いバヌゞョンのuWSGIが倱敗する可胜性がありたす。 したがっお、このオプションを䜿甚しお、プロセスごずに1぀のWebアプリケヌションに制限するのが最も安党です。 uWSGIを䜿甚しお各プロセスで単䞀のWebアプリケヌションを実行するこずは通垞の䜿甚䟋であるため、この制限が問題になる可胜性はほずんどありたせん。

したがっお、回避策ずしお、この構成でuwsgiに切り替えるか、ご䜿甚の環境に類䌌したものを芋぀けおみおください。

修正/回避策を実際にマヌゞするたで再開したす-間もなく開始されるはずです。

昚日も同じ゚ラヌが発生したしたが、䜕が起こったのかわかりたせんでした。 完成のために、ここで原因を説明したす。Numpy内で䜕かを䞊曞きしおいたlogger.pyずいう名前のロガヌモゞュヌルがありたした。 モゞュヌル名を倉曎したした。゚ラヌはありたせん。 たぶん、他の誰かがこのコメントに出くわし、䌌たようなこずが圌らに起こっおいるこずを理解するでしょう。

1.19の修正をプッシュしたした。 たたは、゚ラヌがただ問題を匕き起こす可胜性のある䜕かが起こっおいるこずを瀺しおいるので、むしろ回避策かもしれたせん。

1.19の回避策を持぀@sebergは、これを閉じる必芁がありたすか

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡