ImportError:没有名为“队列”的模块


73

我正在尝试导入requests模块,但出现此错误,我的python版本是3.4,在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'

Answers:


132

import queue在Python 3中为小写 q

更改Qq,它将很好。

(有关智能切换,请参见https://stackoverflow.com/a/29688081/632951中的代码 。)


8
这与明确导入的人员有关Queue,但是OP的回溯使它清楚地知道该requests模块正在queue首先尝试,然后回退以进行尝试Queue (使其版本完全像所述的那样可移植)。您正在回答很多有此错误的人的问题,但根本不是OP的问题。
ShadowRanger

55

队列在多处理模块中,因此:

from multiprocessing import Queue

我不知道为什么这个Python没有它。可以很好地替换queue.Queue为multiprocessing.JoinableQueue,因为它允许简单地替换导入而无需编辑.join()和.task_done()流。
m3nda

4
multiprocessing.Queue是一个完全不同的阶级有很多更高的开销; 要进行穿线,需要 Queuequeue(Py3)/ Queue(Py2)模块中进行。requests正在正确地尝试从两个名称中获取它(因此与版本无关);失败表示一个完全不同的问题(如OP在其答案中所述)。
ShadowRanger

另外,由于multiprocessing.Queue是基于酸洗的,因此在功能上甚至是不相等的。如果您在线程之间传递了非可拾取对象,它将以queue/QueueQueue类成功,而以的类失败multiprocessing.Queue
ShadowRanger

31

我解决了问题,我的问题是我在同一目录中有一个名为queue.py的文件


6
帮助过我。这很尴尬,但是我创建了自己的自定义queue.py文件来学习队列。感谢您的回答。
Gunnm

1
有没有办法在不命名本地的情况下导入真实模块queue.py
fritzo

16

这是因为Python版本。在Python 3中是 import Queue as queue;相反,在Python 2.x中,它是import queue。如果您想在两种环境中都使用它,则可以使用此处所述的以下内容

try:
   import queue
except ImportError:
   import Queue as queue

1
你打错字了。您应该更改为:在Python 3中为import queue; 相反,在Python2.x中为import Queue
HaxtraZ

2

就我而言,应该是:

from multiprocessing import JoinableQueue

由于在python2中,Queue具有类似的方法.task_done(),但在python3multiprocessing.Queue中没有这种方法,并且multiprocessing.JoinableQueue确实存在。


2

我遇到了同样的问题,并学习了队列模块定义了类和异常,这些类和异常定义了公共方法(队列对象)。

例如

workQueue = queue.Queue(10)

0

我只是将文件名Queue.py复制*/lib/python2.7/到到queue.py中,这解决了我的问题。


-9

您需要Queuelib通过安装Python Package Index (PyPI)或从源。

要使用pip安装:-

$ pip install queuelib

要使用easy_install进行安装:-

$ easy_install queuelib

如果您下载了源tarball,则可以通过运行以下命令(以root用户身份)进行安装:-

python setup.py install

3
Queuelib似乎没有提供请求使用的队列模块。
LawfulEvil

请求的队列不属于Queuelib。
Ajayi Oluwaseun Emmanuel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.