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】:你是对的 urllib 和 urllib2 包已经被分成 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 数据不起作用