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
ã2019-08-28ã
ããªãã®ãã¹ãã®åŸãããã¯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ã¯ããããéããå¿ èŠããããŸããïŒ
æãåèã«ãªãã³ã¡ã³ã
numpyãnumpy == 1.15.4ã«ããŠã³ã°ã¬ãŒãããããšã§ãããŸããããŸããã