No module named 'Queue'

Viewed 25478

My import of Python modules

import Queue
from threading import Thread
import time

But when I run code

File "b1.py", line 3, in <module>
    import Queue
ModuleNotFoundError: No module named 'Queue'

I have seen similar threads on SO,but nothings works for me

/usr/bin/python3 --version
Python 3.5.2
milenko@milenko-System-Product-Name:~$ python --version
Python 3.6.0 :: Anaconda custom (64-bit)

If I change to

from multiprocessing import Queue

there is no import problem.But than I have this

AttributeError: 'Queue' object has no attribute 'join'

What should I try next?

2 Answers

On Python 2, the module is named Queue, on Python 3, it was renamed to follow PEP8 guidelines (all lowercase for module names), making it queue. The class remains Queue on all versions (following PEP8).

Typically, the way you'd write version portable imports would be to do:

try:
    import queue           # Python 3 import
except ImportError:
    import Queue as queue  # If queue missing, we're on Py2, import Py2 as Py3 name

In my case, I had the following for Python 2.7

from Queue import Queue, Empty

I changed only the module name to lower case, and it worked fine with Python 3 like

from queue import Queue, Empty
Related