Что означает запись типа "urllib3[socks]<3,>=1.26" в описании зависимостей модуля Python?
Пытаюсь установить в оффлайне модуль selenuim из скачанного файла. Он говорит, что ему не хватает urllib3[socks]. Модуль urllib3 я установил ранее, в качестве модуля он импортируется под именем urllib. А вот запись с квадратными скобками и именем socks внутри них я не понимаю. Внутри whl-файла есть файл METADATA, и в нём есть именно такая запись: urllib3[socks]<3,>=1.26. Установленная версия urllib3 подходит под эти рамки. Чего ему ещё надо от меня ?
Ответы (1 шт):
В квадратных скобках указывается имя набора опциональных зависимостей (дополнительных, не устанавливаемых по умолчанию). Чтобы они установились, например, через pip, нужно делать установку именно с квадратными скобками:
pip install "urllib3[socks]" (лучше - с указанием ограничений по версии, раз они в метаданных указаны, т.е. pip install "urllib3[socks]<3,>=1.26")
Чтобы понять, что за зависимости, нужно смотреть setup.py или pyproject.toml проекта, в данном случае - pyproject.toml (setup.py в проекте отсутствует). Смотрим раздел [project.optional-dependencies]:
[project.optional-dependencies]
brotli = [
"brotli>=1.0.9; platform_python_implementation == 'CPython'",
"brotlicffi>=0.8.0; platform_python_implementation != 'CPython'"
]
zstd = [
"zstandard>=0.18.0",
]
socks = [
"PySocks>=1.5.6,<2.0,!=1.5.7",
]
Видим, что в группе socks указан пакет PySocks, значит нужно доустановить его.
В setup.py опциональные зависимости передаются в виде словаря в параметр extras_require функции setup, т.е. было бы что-то такое:
...
setup(
...
extras_require={
"brotli": [
"brotli>=1.0.9; platform_python_implementation == 'CPython'",
"brotlicffi>=0.8.0; platform_python_implementation != 'CPython'",
]
"zstd": ["zstandard>=0.18.0"],
"socks": ["PySocks>=1.5.6,<2.0,!=1.5.7"],
},
...
)
...