Что означает запись типа "urllib3[socks]<3,>=1.26" в описании зависимостей модуля Python?

Пытаюсь установить в оффлайне модуль selenuim из скачанного файла. Он говорит, что ему не хватает urllib3[socks]. Модуль urllib3 я установил ранее, в качестве модуля он импортируется под именем urllib. А вот запись с квадратными скобками и именем socks внутри них я не понимаю. Внутри whl-файла есть файл METADATA, и в нём есть именно такая запись: urllib3[socks]<3,>=1.26. Установленная версия urllib3 подходит под эти рамки. Чего ему ещё надо от меня ?


Ответы (1 шт):

Автор решения: insolor

В квадратных скобках указывается имя набора опциональных зависимостей (дополнительных, не устанавливаемых по умолчанию). Чтобы они установились, например, через 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"],
    },
   ...
)

...
→ Ссылка