Ошибка Python 2.7.10 "из urllib.request import urlopen" без модуля с именем request
Я открыл код python из github
. Я предположил, что это был python2.x
и получил вышеуказанную ошибку, когда я пытался ее запустить. Из чтения, которое я видел, Python 3 обесценил сам urllib
и заменил его на количество библиотек, включая urllib.request
.
Похоже, что код написан на python 3 (подтверждение от кого-то, кто знает, будет оценен по достоинству).
На данный момент я не хочу переходить на Python 3 - я не исследовал, что он будет делать с моим существующим кодом.
Думаю, что для Python 2
должен быть модуль urllib
, я искал Google (используя "python2 urllib download" ) и не нашел его. (Возможно, это было скрыто во многих ответах, поскольку urllib
включает в себя функции загрузки.) Я посмотрел в моем каталоге Python27/lib
и не видел его там.
Могу ли я получить версию этого модуля, которая работает на Python27
? Где и как?
Ответы
Ответ 1
Попробуйте использовать urllib2:
https://docs.python.org/2/library/urllib2.html
Эта строка должна работать, чтобы заменить urlopen:
from urllib2 import urlopen
Протестировано в Python 2.7 на Macbook Pro
Попробуйте отправить ссылку на git.
Ответ 2
Вместо использования urllib.request.urlopen() удалить запрос для python 2.
urllib.urlopen() вам не нужно запрашивать в python 2.x то, что вы пытаетесь сделать. Надеюсь, это сработает для вас.
Это было протестировано с использованием python 2.7. Я получал такое же сообщение об ошибке, и это разрешило его.
Ответ 3
from urllib.request import urlopen, Request
Необходимо решить все
Ответ 4
Вы можете запрограммировать защиту и сделать свой импорт как:
try:
from urllib.request import urlopen
except ImportError:
from urllib2 import urlopen
а затем в коде просто используйте:
data = urlopen(MIRRORS).read(AMOUNT2READ)
Ответ 5
Вы правы, пакеты urllib и urllib2 были разделены на пакеты urllib.request, urllib.parse и urllib.error в Python 3.x. Последние пакеты не существуют в Python 2.x
Из документация -
Модуль urllib был разделен на части и переименован в Python 3 в urllib.request, urllib.parse и urllib.error.
Из документация urllib2 -
Модуль urllib2 был разделен на несколько модулей в Python 3 с именем urllib.request и urllib.error.
Итак, я уверен, что загруженный вами код был написан для Python 3.x, так как они используют библиотеку, которая присутствует только в Python 3.x.
В python есть пакет urllib, но у него нет подпакета запроса. Кроме того, давайте предположим, что вы много работаете и как-то создаете подпакет запросов, доступный в 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
Ответ 6
На данный момент кажется, что я смог преодолеть это, добавив ?
после URL.
Ответ 7
+ Изменить
from urllib.request import urlopen
в
from urllib import urlopen
Я смог решить эту проблему, изменив таким образом. Для Python2.7
в macOS10.14