requests
モジュールをインポートしようとしていますが、このエラーが発生しましたpythonバージョンはubuntu 14.04で3.4を実行しています
>>> 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'
同じディレクトリにqueue.pyという名前のファイルがあったという問題を解決しました
import queue
はlowercaseq
in Python 3。
Q
をq
に変更すると問題ありません。
(スマートスイッチングについては、 https://stackoverflow.com/a/29688081/632951 のコードを参照してください。)
キューはマルチプロセッシングモジュールにあるため、次のようになります。
from multiprocessing import Queue
私の場合、次のようになります。
from multiprocessing import JoinableQueue
Python2ではQueueには.task_done()
のようなメソッドがありますが、python3ではmultiprocessing.Queue
にはこのメソッドがなく、multiprocessing.JoinableQueue
にはあります。
Pythonバージョンのためです。 Python 3では、import Queue as queue
です。反対にPython 2.xではimport queue
です。両方の環境で必要な場合は、前述のように以下を使用できます here
try:
import queue
except ImportError:
import Queue as queue
同じ問題にぶつかり、キューモジュールがパブリックメソッド(キューオブジェクト)を定義するクラスと例外を定義することを学びます。
例.
workQueue = queue.Queue(10)