Я запускаю приложение Python с Python 3.11.14 внутри контейнера Docker и сталкиваюсь с проблемами с boto3.
Среда
- Python: 3.11.14
- boto3: 1.34.0
- botocore: 1.34.0
- urllib3: 1.26.18
- ОС: redhat/ubi10-minimal
При импорте или инициализации ресурса S3:
import boto3
voice_s3 = boto3.resource("s3")
Я получаю следующую ошибку:
RecursionError: maximum recursion depth exceeded
File ".../botocore/httpsession.py", line 349, in _get_ssl_context
return create_urllib3_context()
Трассировка стека повторяется внутри ssl.py и botocore/httpsession.py до тех пор, пока не будет превышен предел рекурсии. Полная трассировка стека приведена ниже. вставлен
Попытка исправить: понизить версию boto3
Я попробовал удалить текущую версию и установить более старую:
pip uninstall boto3
pip install boto3==1.9.164
Проблема 2: Ошибка импорта после перехода на более раннюю версию
После перехода на более раннюю версию приложение сразу же завершается с ошибкой при импорте:
ImportError: cannot import name 'Mapping' from 'collections'
Это происходит внутри:
botocore/vendored/requests/packages/urllib3/_collections.py
Что я пробовал
- Понижение версии boto3
- Повторное обновление boto3 до последней версии
- Сохранение urllib3==1.26.18
- Восстановление образа Docker с нуля
- Новый boto3 → RecursionError
- Старый boto3 → ImportError: Mapping from коллекции
- Официально ли boto3 совместим с Python 3.11?
- Какая комбинация версий boto3, botocore и urllib3 следует использовать с Python 3.11?
- Известна ли это проблема с рекурсией SSL / urllib3?
- Как правильно это исправить, не понижая версию Python?
Полная трассировка стека (сокращенно)
RecursionError: maximum recursion depth exceeded
File ".../ssl.py", line 624, in options
File ".../botocore/httpsession.py", line 349, in _get_ssl_context
и после перехода на более раннюю версию:
ImportError: cannot import name 'Mapping' from 'collections'
Подробнее здесь: https://stackoverflow.com/questions/798 ... ror-cannot
Мобильная версия