Подтвердить что ты не робот

Ошибка 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? Где и как?

4b9b3361

Ответ 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