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?
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.
from urllib.request import urlopen, Request
Sollte alles lösen
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.
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)
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
Für den Moment scheint es, dass ich das überwinden könnte, indem ich nach der URL einen ?
hinzufüge.
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