Нужно ли нам импортировать lib запросов для использования запросов, если мы уже импортировали urllib и urllib3? - urllibx, запрос путаницы - PullRequest
0 голосов
/ 04 ноября 2018

Мне нужно использовать «запросы» и функцию от urllib3. В коде
code importing requests and printing dir(urllib3)
вы можете видеть, что библиотека requests импортируется, но в то же время это модуль / пакет внутри urllib3, который также уже был импортирован.

Проводя некоторые исследования, я обнаружил, что Python поставляется с пакетом urllib, который поставляется с модулем request. С другой стороны, requests - это модуль внутри urllib3, но это отдельная библиотека.

urllib и urllib2 являются стандартными библиотеками Python, но urllib3 - это полностью разделенная библиотека с непонятным названием. Часть из этого была включена в стандартную библиотеку, и requests зависит от нее, но это не более новая версия urllib / urllib2; библиотека, которую на самом деле нужно улучшить - httplib (ref: Github ).

"Под капотом запросов использует urllib3 для выполнения большей части тяжелой работы http. При правильном использовании он должен быть в основном таким же, если вам не требуется более продвинутая конфигурация"
(ref: Stackexchange ):

Я пришел к этим выводам, но все еще в замешательстве: если я уже импортировал urllib, нужно ли мне импортировать requests? Что если я импортировал urllib3?

Кроме того, requests должен быть импортирован отдельно, как в изображенном коде, или он должен быть импортирован из одной из упомянутых библиотек?

1 Ответ

0 голосов
/ 04 ноября 2018

Если вы используете модуль requests, то это единственное, что вам нужно импортировать. Остальное позаботится о вас Python. То, что urllib3 используется requests, является подробностью реализации , если только вам не нужен доступ к определенным объектам, определенным библиотекой urllib3, вам не нужно импортировать их в базу кода.

requests - это , а не модуль внутри urllib3. Модуль urllib3 определяет модуль urllib3.request (в единственном числе!), Который полностью отличается от пакета requests:

>>> import urllib3
>>> import requests
>>> urllib3.request
<module 'urllib3.request' from '/Users/mj/Development/venvs/stackoverflow-latest/lib/python3.7/site-packages/urllib3/request.py'>
>>> requests
<module 'requests' from '/Users/mj/Development/venvs/stackoverflow-latest/lib/python3.7/site-packages/requests/__init__.py'>
>>> requests is urllib3.request
False

Обратите внимание, что urllib3.request - это модуль внутри urllib3 пакета пространства имен . import request (нет s) не будет импортировать его, так как это запрашивает имя верхнего уровня. Также не будет import somethingelse.request, поскольку это будет пространство имен, отличное от urllib3. И то, что имена requests и request похожи, не означает, что они одно и то же. Стандарт HTTP имеет дело с абстрактной концепцией запроса , отправляемого на сервер, а сервер возвращает ответ , поэтому имена в различных проектах, связанных с HTTP, часто будут отражать концепции, которые они представлять в коде.

То же самое относится к именам urllib и urllib2. Когда-то давно Python начинал с ограниченного пакета urllib, а позже к нему добавили пакет urllib2, который расширил первый и добавил дополнительные функциональные возможности. Python 3 объединил два пакета и реорганизовал функциональность в серию новых модулей в пространстве имен urllib . Пакет urllib3 является независимым проектом для создания лучшей библиотеки с той же функциональностью. Никакие части этого проекта не включены в стандартную библиотеку Python.

requests - это проект, который предоставляет вам простой, понятный и простой в использовании API для выполнения HTTP-запросов и обработки полученных ответов. Используйте его для этого API, не беспокойтесь о деталях реализации.

...