Python 2.7.10错误“来自urllib.request import urlopen”没有模块命名请求

时间:2015-07-24 02:28:23

标签: python urllib

我从github打开了python代码。我假设它是python2.x并且在我尝试运行它时遇到了上述错误。从阅读中我看到Python 3已经贬低了urllib本身并将其替换为包括urllib.request在内的许多库。

看起来代码是用python 3编写的(来自知道会被赞赏的人的确认。) 在这一点上,我不想转向Python 3 - 我还没有研究它对我现有代码的作用。

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

7 个答案:

答案 0 :(得分:38)

尝试使用urllib2:

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

此行应该可以替换urlopen:

from urllib2 import urlopen

在Macbook Pro上的Python 2.7中测试

尝试发布相关git的链接。

答案 1 :(得分:8)

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

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

答案 2 :(得分:8)

from urllib.request import urlopen, Request

应该解决所有问题

答案 3 :(得分:6)

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

data = urlopen(MIRRORS).read(AMOUNT2READ)

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

{{1}}

答案 4 :(得分: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 子包。另外,假设你做了很多工作,并以某种方式在Python 2.x中提供 request 子包。

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

即便如此,可能还有其他错误,因为Python 2.x到Python 3.x之间的一些实现细节发生了变化(例如 - 列表理解在Python 3.x中有自己的命名空间)

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

答案 5 :(得分:2)

更改

from urllib.request import urlopen

from urllib import urlopen

我能够通过这样更改来解决此问题。对于Python2.7

中的macOS10.14

答案 6 :(得分:0)

目前,似乎我可以通过在网址后添加#!/usr/bin/python3 from tkinter import * from tkinter import ttk def ChangeLabelText(m): m.config(text = 'You pressed the button!') def main(): Root = Tk() MyLabel = ttk.Label(Root, text = 'The button has not been pressed.') MyLabel.pack() MyButton = ttk.Button(Root, text = 'Press Me', command = lambda: ChangeLabelText(MyLabel)) MyButton.pack() Root.mainloop() if __name__ == "__main__": main() 来解决这个问题。

相关问题