webentwicklung-frage-antwort-db.com.de

Python 2.7.10 Fehler "von urllib.request import urlopen" keine Anforderung mit dem Namen Modul

Ich habe Python-Code von github geöffnet. Ich nahm an, dass es python2.x war und bekam den obigen Fehler, als ich versuchte, es auszuführen. Aus dem Lesen habe ich gesehen, dass Python 3 urllib selbst abgewertet und durch eine Reihe von Bibliotheken ersetzt hat, einschließlich urllib.request

Es sieht so aus, als ob der Code in Python 3 geschrieben wurde (eine Bestätigung von jemandem, der weiß, dass es uns gefallen würde.) .__ An diesem Punkt möchte ich nicht zu Python 3 wechseln - ich habe nicht recherchiert, was er mit meinem machen würde vorhandener Code. 

Ich denke, es sollte ein urllib-Modul für Python 2 geben, ich habe Google gesucht (mit "python2 urllib download") und habe keine gefunden. (Möglicherweise wurde es in den vielen Antworten versteckt, seit urllib die Download-Funktionalität enthält.) Ich habe in meinem Python27/lib-Verzeichnis nachgeschaut und es dort nicht gesehen ..... Kann ich eine Version dieses Moduls erhalten, die auf Python27 läuft? Wo und wie?

21
Steve Maguire

Versuchen Sie es mit urllib2:

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

Diese Zeile sollte funktionieren, um urlopen zu ersetzen:

from urllib2 import urlopen

In Python 2.7 unter Macbook Pro getestet

Versenden Sie einen Link zu dem betreffenden Git.

38
NevDev
from urllib.request import urlopen, Request

Sollte alles lösen

8
Maciej Osowski

Entfernen Sie anstelle von urllib.request.urlopen () die Anforderung für Python 2.

urllib.urlopen () muss in python 2.x nicht für das angefordert werden. Ich hoffe es funktioniert für Sie. Dies wurde mit Python 2.7 getestet. Ich habe dieselbe Fehlermeldung erhalten und dies wurde behoben.

8

Sie können defensiv programmieren und importieren als:

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

und dann im Code einfach:

data = urlopen(MIRRORS).read(AMOUNT2READ)
5
boardrider

Sie haben Recht, die Pakete urllib und urllib2 wurden in Python 3.x in die Pakete urllib.request, urllib.parse und urllib.error aufgeteilt. Die letzteren Pakete sind in Python 2.x nicht vorhanden

Aus Dokumentation -

Das urllib-Modul wurde in Teile aufgeteilt und in Python 3 in urllib.request, urllib.parse und urllib.error umbenannt.

Aus urllib2 Dokumentation

Das urllib2-Modul wurde in Python 3 auf mehrere Module mit den Namen urllib.request und urllib.error aufgeteilt.

Ich bin mir ziemlich sicher, dass der heruntergeladene Code für Python 3.x geschrieben wurde, da sie eine Bibliothek verwenden, die nur in Python 3.x vorhanden ist.

Es gibt ein urllib -Paket in Python, aber es hat nicht das request -Unterpaket. Nehmen wir außerdem an, Sie erledigen viel Arbeit und machen das request - Unterpaket in Python 2.x irgendwie verfügbar.

Es besteht eine sehr hohe Wahrscheinlichkeit, dass Sie auf weitere Probleme stoßen werden. Es besteht eine große Inkompatibilität zwischen Python 2.x und Python 3.x. Am Ende würden Sie wahrscheinlich mindestens die Hälfte des Codes von Github (und die meisten davon) umschreiben (Lesen und Verstehen des vollständigen Codes von dort aus). 

Selbst dann kann es andere Fehler geben, die sich aus der Tatsache ergeben, dass einige Implementierungsdetails zwischen Python 2.x und Python 3.x geändert wurden. (Als Beispiel - Listenverständnis erhielt in Python 3.x einen eigenen Namespace)

Sie sollten besser versuchen, Python 3 herunterzuladen und zu verwenden, als zu versuchen, Code, der für Python 3.x geschrieben wurde, mit Python 2.x kompatibel zu machen 

2
Anand S Kumar

Für den Moment scheint es, dass ich das überwinden könnte, indem ich nach der URL einen ? hinzufüge.

0
user3291138

Veränderung

from urllib.request import urlopen 

zu

from urllib import urlopen

Ich konnte dieses Problem lösen, indem ich mich so änderte. Für Python2.7 in macOS10.14

0
ceekay