Python 2.7.10 错误“从 urllib.request 导入 urlopen”没有名为请求的模块

Posted

技术标签:

【中文标题】Python 2.7.10 错误“从 urllib.request 导入 urlopen”没有名为请求的模块【英文标题】:Python 2.7.10 error "from urllib.request import urlopen" no module named request 【发布时间】:2015-10-14 13:52:02 【问题描述】:

我从github 打开了python 代码。我以为它是python2.x,当我尝试运行它时出现上述错误。从阅读中我看到 Python 3 已经贬低了urllib 本身,并用包括urllib.request 在内的许多库取而代之。

看起来代码是用 python 3 编写的(如果知道的人确认一下,将不胜感激。) 在这一点上,我不想迁移到 Python 3——我还没有研究过它会对我现有的代码做什么。

认为Python 2 应该有一个urllib 模块,我搜索了谷歌(使用“python2 urllib 下载”)并没有找到。 (由于urllib 包含下载功能,它可能已隐藏在许多答案中。)我查看了我的Python27/lib 目录并没有在那里看到它。 我可以获得在Python27 上运行的此模块的版本吗?在哪里以及如何?

【问题讨论】:

【参考方案1】:

尝试使用 urllib2:

https://docs.python.org/2/library/urllib2.html

这一行应该可以代替 urlopen:

from urllib2 import urlopen

在 Macbook Pro 上使用 Python 2.7 测试

尝试发布相关 git 的链接。

【讨论】:

这绝对有效。您应该只用 urllib2.urlopen 替换 urllib.request.urlopen【参考方案2】:

你是对的 urlliburllib2 包已经被分成 urllib.request , urllib.parse和 Python 3.x 中的 urllib.error 包。后面的包在 Python 2.x 中不存在

来自documentation -

urllib 模块已被拆分为多个部分,并在 Python 3 中重命名为 urllib.request、urllib.parse 和 urllib.error。

来自urllib2 documentation -

urllib2 模块在 Python 3 中被拆分为多个名为 urllib.request 和 urllib.error 的模块。

所以我很确定您下载的代码是为 Python 3.x 编写的,因为它们使用的库仅存在于 Python 3.x 中。

python中有一个urllib包,但是没有request子包。另外,假设您做了很多工作,并以某种方式使 request 子包在 Python 2.x 中可用。

你很有可能会遇到更多的问题,Python 2.x 和 Python 3.x 之间有很多不兼容的地方,最后你很可能最终会从 github 重写至少一半的代码(并且很可能从那里阅读和理解完整的代码)。

即使这样,由于某些实现细节在 Python 2.x 和 Python 3.x 之间发生了变化,也可能会产生其他错误(例如 - 列表理解在 Python 3.x 中有自己的命名空间)

您最好尝试下载和使用 Python 3,而不是尝试使为 Python 3.x 编写的代码与 Python 2.x 兼容

【讨论】:

谢谢大家。事实证明,转换到 Python 2.7 并不难:只是对 urllib 的引用以及将它与 .decode('utf-8') 一起使用。感谢您的帮助。【参考方案3】:

而不是使用 urllib.request.urlopen() 删除 python 2 的请求。

urllib.urlopen() 你不必在 python 2.x 中请求你想要做的事情。希望对你有效。 这是使用 python 2.7 测试的,我收到了相同的错误消息,这解决了它。

【讨论】:

【参考方案4】:

目前,我似乎可以通过在 URL 后添加 ? 来解决这个问题。

【讨论】:

【参考方案5】:
from urllib.request import urlopen, Request

应该解决一切

【讨论】:

是的,这对我有用,不知道为什么你被别人否决了 Heroku 上的消息仍然相同:没有名为 request 的模块 如果没有urllib.request,则无法导入其子模块。 @rodrigorf 你有没有弄清楚为什么 Heroku 找不到请求? 对不起@Siddhartha,老实说我不记得我在那里做了什么,但考虑到我不再有任何 python 应用程序在 Heroku 上运行,我想我放弃了试图弄清楚。我的作业今天在 Azure 上运行。【参考方案6】:

您可以进行防御性编程,并按以下方式进行导入:

try:
    from urllib.request import urlopen
except ImportError:
    from urllib2 import urlopen

然后在代码中,只需使用:

data = urlopen(MIRRORS).read(AMOUNT2READ)

【讨论】:

【参考方案7】:

改变

from urllib.request import urlopen

from urllib import urlopen

我能够通过这样的改变来解决这个问题。对于Python2.7 中的macOS10.14

【讨论】:

以上是关于Python 2.7.10 错误“从 urllib.request 导入 urlopen”没有名为请求的模块的主要内容,如果未能解决你的问题,请参考以下文章

Python:从 urllib2.urlopen 调用中获取 HTTP 标头?

Python - 从 urllib 获取图像,然后从 PIL 图像读取 EXIF 数据不起作用

python用urllib将url参数解析成字典

linux系统将python升级到2.7.10版本

Python 3.7.4 从官方网站下载,但我安装了 python 2.7.10

升级 python 2.6.6 系统到 2.7.10 版本