导入MongoClient报错AttributeError: module 'h11' has no attribute 'Event'求助
问题
反复遇到如下错误,重装Ubuntu系统也无法解决。执行代码仅为:
from pymongo import MongoClient
仅安装了pymongo包,在Anaconda新建环境和本地Python 3.8.10中均出现相同错误,报错信息如下:
AttributeError Traceback (most recent call last) <ipython-input-1-4aaffd5c9f5f> in <module> ----> 1 from pymongo import MongoClient ~/.local/lib/python3.8/site-packages/pymongo/__init__.py in <module> 90 from pymongo.common import MAX_SUPPORTED_WIRE_VERSION, MIN_SUPPORTED_WIRE_VERSION 91 from pymongo.cursor import CursorType ---> 92 from pymongo.mongo_client import MongoClient 93 from pymongo.operations import ( 94 DeleteMany, ~/.local/lib/python3.8/site-packages/pymongo/mongo_client.py in <module> 57 from bson.son import SON 58 from bson.timestamp import Timestamp ---> 59 from pymongo import ( 60 _csot, 61 client_session, ~/.local/lib/python3.8/site-packages/pymongo/uri_parser.py in <module> 30 ) 31 from pymongo.errors import ConfigurationError, InvalidURI ---> 32 from pymongo.srv_resolver import _HAVE_DNSPYTHON, _SrvResolver 33 from pymongo.typings import _Address 34 ~/.local/lib/python3.8/site-packages/pymongo/srv_resolver.py in <module> 19 20 try: ---> 21 from dns import resolver 22 23 _HAVE_DNSPYTHON = True ~/.local/lib/python3.8/site-packages/dns/resolver.py in <module> 36 import dns.message 37 import dns.name ---> 38 import dns.query 39 import dns.rcode 40 import dns.rdataclass ~/.local/lib/python3.8/site-packages/dns/query.py in <module> 50 _have_http2 = False 51 try: ---> 52 import httpx 53 _have_httpx = True 54 try: ~/.local/lib/python3.8/site-packages/httpx/__init__.py in <module> 1 from .__version__ import __description__, __title__, __version__ ----> 2 from ._api import delete, get, head, options, patch, post, put, request, stream 3 from ._auth import Auth, BasicAuth, DigestAuth 4 from ._client import USE_CLIENT_DEFAULT, AsyncClient, Client 5 from ._config import Limits, Proxy, Timeout, create_ssl_context ~/.local/lib/python3.8/site-packages/httpx/_api.py in <module> 2 from contextlib import contextmanager 3 ----> 4 from ._client import Client 5 from ._config import DEFAULT_TIMEOUT_CONFIG 6 from ._models import Response ~/.local/lib/python3.8/site-packages/httpx/_client.py in <module> 27 from ._transports.asgi import ASGITransport 28 from ._transports.base import AsyncBaseTransport, BaseTransport ---> 29 from ._transports.default import AsyncHTTPTransport, HTTPTransport 30 from ._transports.wsgi import WSGITransport 31 from ._types import ( ~/.local/lib/python3.8/site-packages/httpx/_transports/default.py in <module> 28 from types import TracebackType 29 ---> 30 import httpcore 31 32 from .._config import DEFAULT_LIMITS, Limits, Proxy, create_ssl_context ~/.local/lib/python3.8/site-packages/httpcore/__init__.py in <module> ----> 1 from ._api import request, stream 2 from ._async import ( 3 AsyncConnectionInterface, 4 AsyncConnectionPool, 5 AsyncHTTP2Connection, ~/.local/lib/python3.8/site-packages/httpcore/_api.py in <module> 3 4 from ._models import URL, Response ----> 5 from ._sync.connection_pool import ConnectionPool 6 7 ~/.local/lib/python3.8/site-packages/httpcore/_sync/__init__.py in <module> ----> 1 from .connection import HTTPConnection 2 from .connection_pool import ConnectionPool 3 from .http11 import HTTP11Connection 4 from .http_proxy import HTTPProxy 5 from .interfaces import ConnectionInterface ~/.local/lib/python3.8/site-packages/httpcore/_sync/connection.py in <module> 11 from ..backends.sync import SyncBackend 12 from ..backends.base import NetworkBackend, NetworkStream ---> 13 from .http11 import HTTP11Connection 14 from .interfaces import ConnectionInterface 15 ~/.local/lib/python3.8/site-packages/httpcore/_sync/http11.py in <module> 42 43 ---> 44 class HTTP11Connection(ConnectionInterface): 45 READ_NUM_BYTES = 64 * 1024 46 ~/.local/lib/python3.8/site-packages/httpcore/_sync/http11.py in HTTP11Connection() 138 139 def _send_event( --> 140 self, event: h11.Event, timeout: Optional[float] = None 141 ) -> None: 142 bytes_to_send = self._h11_state.send(event) AttributeError: module 'h11' has no attribute 'Event'
解决方案
这个错误是由于h11包版本过低导致的——httpcore依赖的h11需要包含Event类,而旧版本的h11没有这个属性。按以下步骤修复:
- 先卸载当前的
h11包:pip uninstall -y h11 - 安装兼容的
h11版本(指定>=0.13.0,该版本引入了Event类):pip install h11>=0.13.0 - 或者直接安装与当前环境匹配的最新兼容版本:
pip install --upgrade h11
如果使用Anaconda环境,替换pip为conda命令操作即可:
conda remove -y h11 conda install h11>=0.13.0
内容的提问来源于stack exchange,提问作者Bernard Rosencrantz
相关产品推荐
相关产品推荐

