python - 如果我们已经导入了 urllib 和 urllib3,是否需要导入 requests lib 才能使用 requests?- urllibx,请求混淆
问题描述
我需要使用“请求”和urllib3
. 在代码
中你可以看到这个库正在被导入,但同时它是一个模块/包里面,它也已经被导入了。
requests
urllib3
做一些研究,我发现 Python 带有urllib
包,它带有request
模块。另一方面,requests
内部是一个模块urllib3
,但它本身就是一个库。
urllib
并且urllib2
是标准的 Python 库,但urllib3
它是一个完全独立的库,名称令人困惑。它的一部分已经包含在标准库中并requests
依赖于它,但它不是urllib
/的更新版本urllib2
;真正想要改进的库是httplib
(参考:Github)。
“在后台,requests使用urllib3来完成大部分的 http 繁重工作。如果使用得当,它应该基本相同,除非您需要更高级的配置”(参考:堆栈交换):
我得出了这些结论,但我仍然感到困惑:如果我已经导入了urllib
,我还需要导入requests
吗?如果我进口了urllib3
怎么办?
此外,应该requests
单独导入,如所描述的代码中所示,还是应该从上述库之一导入?
解决方案
如果您正在使用该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
内的一个模块。(no ) 不会导入它,因为它需要一个顶级名称。也不会,因为那将是与. 并且仅仅因为名称和相似并不意味着它们是相同的东西。HTTP 标准处理发送到服务器的请求和服务器返回响应的抽象概念,因此处理 HTTP 的不同项目中的名称通常会反映它们在代码中表示的概念。urllib3
import request
s
import somethingelse.request
urllib3
requests
request
这同样适用于名称urllib
和urllib2
。曾几何时,Python 从一个urllib
有限的包开始,后来urllib2
又添加了一个包,扩展了第一个包并添加了更多功能。Python 3 合并了这两个包,并将功能重新组织成命名空间下的一系列新模块urllib
。该urllib3
软件包是一个独立项目,旨在为相同的功能构建更好的库。该项目的任何部分都没有被合并到 Python 标准库中。
requests
是一个项目,它为您提供了一个干净、直接、易于使用的 API 来发出 HTTP 请求并处理结果响应。将它用于该 API,不必担心实现细节。
推荐阅读
- java - 在 JAVA swing 中,当我们使用 JFXPanel 实现 JAVAFX 按钮,然后我们删除 jpanel 并再次添加它,然后场景被删除或隐藏
- c++ - 如何覆盖在 MFC 上再次打开的 csv 文件
- linux - gcc -static 会影响所有提供的库吗?
- ruby-on-rails - f 选择多项选择在表单中不起作用
- node.js - 当服务器应用程序在 EC2 上运行时如何获取用户的浏览器 ID
- highcharts - highcharts,没有数据位置
- ios - 如何在目标 c 中通过 POST 请求捕获标准错误输出并将消息发送到远程日志文件?
- php - 检查数组是否包含与值匹配的数组,然后将结果存储到新数组中
- amazon-web-services - 在亚马逊 AWS 上托管模型
- ios - 离线支持的 Firebase 数据检索问题