独角兽导入错误:无法从 docker 中的'eventlet.wsgi'导入名称'ALREADY_HANDLED'



我在docker中用gunicorn(eventlet worker(运行了一个工作代码flask。它也在生产中工作,但在我的机器上,它开始这样做。我在谷歌上找不到关于这件事的任何信息。可能是什么问题?

Error: class uri 'eventlet' invalid or not found:
web_1       |
web_1       | [Traceback (most recent call last):
web_1       |   File "/root/.local/lib/python3.7/site-packages/gunicorn/util.py", line 99, in load_class
web_1       |     mod = importlib.import_module('.'.join(components))
web_1       |   File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
web_1       |     return _bootstrap._gcd_import(name[level:], package, level)
web_1       |   File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
web_1       |   File "<frozen importlib._bootstrap>", line 983, in _find_and_load
web_1       |   File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
web_1       |   File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
web_1       |   File "<frozen importlib._bootstrap_external>", line 728, in exec_module
web_1       |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
web_1       |   File "/root/.local/lib/python3.7/site-packages/gunicorn/workers/geventlet.py", line 20, in <module>
web_1       |     from eventlet.wsgi import ALREADY_HANDLED as EVENTLET_ALREADY_HANDLED
web_1       | ImportError: cannot import name 'ALREADY_HANDLED' from 'eventlet.wsgi' (/root/.local/lib/python3.7/site-packages/eventlet/wsgi.py)
web_1       | ]

安装旧版本的eventlet解决了问题:pip install eventlet==0.30.2


编辑:

您可以使用这样的更新版本:pip install eventlet==0.33.0 https://github.com/benoitc/gunicorn/archive/refs/heads/master.zip#egg=gunicorn==20.1.0

请参阅:https://github.com/benoitc/gunicorn/pull/2581#issuecomment-994198667

谢谢@jmunsch

看起来eventlet最近发生了更改

有关示例补丁和潜在发布版本,请参阅本PR:https://github.com/benoitc/gunicorn/pull/2581

Eventlet 0.30.3+删除了wsgi。ALREADY_HANDLED正在破坏中的公用API只是补丁版本的增加。很抱歉

ALREADY_HANDLED问题:eventlet/eventlet#543解决方案WSGI_LOCAL:eventlets/eventlets#544

建议使用eventlet>0.31.0如果使用websocket,因为旧版本易受DoS攻击。GHSA-9p9m-jm8w-94p2

CI在我未接触的线路上的皮林检查失败。

我在尝试将SocketIO与Flask一起使用时遇到了完全相同的错误,并在https://localcoder.org/deploy-flask-socketio-on-beanstalk

我能够按照他们的建议运行:

pip uninstall gunicorn
pip uninstall eventlet
pip install gunicorn==20.1.0
pip install eventlet==0.30.2
gunicorn --worker-class eventlet -w 1 app:app

环境:AWS ALB->EC2/Linux2(python 3.8.5,Flask Socket.IO(

相关内容

最新更新