ImportError: Kein Modul mit dem Namen 'Queue'

73

Ich versuche, ein requestsModul zu importieren , aber ich habe diesen Fehler erhalten. Meine Python-Version ist 3.4 und läuft unter Ubuntu 14.04

>>> import requests
Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/connectionpool.py", line 10, in <module>
    from queue import LifoQueue, Empty, Full
ImportError: cannot import name 'LifoQueue'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.4/dist-packages/requests/__init__.py", line 58, in <module>
   from . import utils
  File "/usr/local/lib/python3.4/dist-packages/requests/utils.py", line 26, in <module>
    from .compat import parse_http_list as _parse_list_header
  File "/usr/local/lib/python3.4/dist-packages/requests/compat.py", line 7, in <module>
    from .packages import chardet
  File "/usr/local/lib/python3.4/dist-packages/requests/packages/__init__.py", line 3, in <module>
    from . import urllib3
  File "/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/__init__.py", line 10, in <module>
    from .connectionpool import (
  File "/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/connectionpool.py", line 12, in <module>
    from Queue import LifoQueue, Empty, Full
ImportError: No module named 'Queue'
Ali Faki
quelle

Antworten:

126

import queueist in Python 3 klein geschrieben q .

Wechseln Sie Qzu qund es wird gut.

( Informationen zum intelligenten Umschalten finden Sie im Code unter https://stackoverflow.com/a/29688081/632951 .)

Pacerier
quelle
8
Dies ist für Personen relevant, die explizit importieren Queue. Der Traceback des OP macht jedoch deutlich, dass das requestsModul queuezuerst versucht und dann zurückfällt, um Queue es zu versuchen (wodurch die Version genau wie beschrieben portabel wird). Sie beantworten die Frage, die viele Menschen mit diesem Fehler haben, aber überhaupt nicht die Frage des OP.
ShadowRanger
54

Die Warteschlange befindet sich im Multiprozessor-Modul.

from multiprocessing import Queue
Peter
quelle
Ich weiß nicht, warum diese Python ohne sie kam. Der gute Ersatz für queue.Queue ist multiprocessing.JoinableQueue, da der Import einfach ersetzt werden kann, ohne dass der Fluss .join () und .task_done () bearbeitet werden müssen.
m3nda
4
Das multiprocessing.Queueist eine ganz andere Klasse mit viel höherem Overhead; Zum Einfädeln möchten Sie Queuevom queue(Py3) / Queue(Py2) -Modul. requestsversucht korrekt, es von beiden Namen zu erhalten (es ist also versionunabhängig); Der Fehler weist auf ein völlig anderes Problem hin (wie das OP in seiner Antwort erklärt).
ShadowRanger
Da multiprocessing.Queuees auf Beizen basiert, ist es nicht einmal funktional gleichwertig. wenn Sie nicht-picklable Objekte haben immer zwischen Threads übergeben, wird es mit Erfolg queue/ Queue‚s - QueueKlasse und nicht mit multiprocessing.Queue.
ShadowRanger
31

Ich habe das Problem gelöst. Mein Problem war, dass ich die Datei queue.py im selben Verzeichnis hatte

Ali Faki
quelle
6
Half mir. Es ist peinlich, aber ich habe meine eigene Datei queue.py erstellt, um Warteschlangen zu lernen. Danke für die Antwort.
Gunnm
1
Gibt es eine Möglichkeit, das reale Modul zu importieren, ohne das lokale zu benennen queue.py?
Fritzo
15

Es liegt an der Python-Version. In Python 3 ist es import Queue as queue; im Gegenteil, in Python 2.x ist es import queue. Wenn Sie es für beide Umgebungen wünschen, können Sie etwas unten verwenden, wie hier erwähnt

try:
   import queue
except ImportError:
   import Queue as queue
GPrathap
quelle
1
Du hast Tippfehler gemacht. Sie sollten dies ändern: In Python 3 ist es import queue; im Gegenteil in Python2.x ist es import Queue.
HaxtraZ
2

In meinem Fall sollte es sein:

from multiprocessing import JoinableQueue

Da in Python2 Queue Methoden wie hat .task_done(), aber in Python3 multiprocessing.Queuediese Methode nicht hat und multiprocessing.JoinableQueuetut.

Panfeng Li
quelle
2

Ich stoße auf dasselbe Problem und erfahre, dass das Warteschlangenmodul Klassen und Ausnahmen definiert, die die öffentlichen Methoden (Warteschlangenobjekte) definieren.

Ex.

workQueue = queue.Queue(10)
asfawh
quelle
-9

Sie müssen Queuelibentweder über Python Package Index (PyPI)oder von der Quelle installieren .

So installieren Sie mit pip: -

$ pip install queuelib

So installieren Sie mit easy_install: -

$ easy_install queuelib

Wenn Sie einen Quell-Tarball heruntergeladen haben, können Sie ihn installieren, indem Sie Folgendes ausführen (als Root): -

python setup.py install
Arjun Sharma
quelle
3
Queuelib scheint das von Anforderungen verwendete Warteschlangenmodul nicht bereitzustellen.
LawfulEvil
Die angeforderte Warteschlange ist nicht Teil von Queuelib.
Ajayi Oluwaseun Emmanuel