2017-02-13 7 views
0

でキューを開始することはできません、次の簡単なスクリプトはのpython3ではImportErrorが発生します。はのpython3

from multiprocessing import Queue 
queue = Queue() 
print("OK") 

このエラーを再現するための鍵は、このファイルqueue.pyに名前を付けることで、その後、次のメッセージが表示されます。

Traceback (most recent call last): 
File "queue.py", line 3, in <module> 
    queue = Queue() 
File "/home/wangc/app/anaconda/lib/python3.5/multiprocessing/context.py", line 100, in Queue 
    from .queues import Queue 
File "/home/wangc/app/anaconda/lib/python3.5/multiprocessing/queues.py", line 20, in <module> 
    from queue import Empty, Full 
File "/home/wangc/temp/queue.py", line 3, in <module> 
    queue = Queue() 
File "/home/wangc/app/anaconda/lib/python3.5/multiprocessing/context.py", line 100, in Queue 
    from .queues import Queue 
ImportError: cannot import name 'Queue' 

ファイルの名前がqueueue.pyの場合はすべて問題ありません。

マルチプロセッシングモジュールは、マルチプロセッシングモジュール内のあるファイルと名前が一致するため、キューをmy queue.pyからインポートしようとしているからです。

しかし、もしそれがどのようにPythonが動作するのであれば、私は可能な内部ライブラリのファイル名を避けるべきです。実用的ではありません。

このエラーは、私のファイルのファイル名とマルチプロセッシングモジュールのファイルの名前に起因しますか?そうであれば、私のファイル名が一般的なプログラミングで可能なライブラリのファイルと異なることをどうやって保証できますか?

+1

'Queue'は実際には標準のlibの' queue'パッケージから来ています。 –

+0

これは本当にpythonの仕組みです - http://stackoverflow.com/questions/1224741/trying-to-import-module-with-the-name-name-as-a-built-in-module-causes- an-import – daveruinseverything

+0

次に、可能なライブラリの名前を避けるべきです。どうやってやるの? –

答えて

2

インポートするモジュールと同じファイル名を使用することはできません。 詳細を確認するためにモジュールを読む これを使用すると、未実装のパッケージ名は常にトップレベルのパッケージを参照します。その後、独自のパッケージにアクセスするために相対インポートを使用する必要があります。 あなたは約Absolute and Relativeこの非常に問題に対処する輸入を読む必要があります。