2017-02-13 4 views
0

Das folgende einfache Skript einen Import in python3 aufwirft:Kann nicht Queue initiieren in python3

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

Der Schlüssel um diesen Fehler zu reproduzieren ist, diese Datei zu benennen queue.py, und dann werden die folgenden Meldungen angezeigt:

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' 

Wenn die Datei als queueue.py benannt ist, dann ist alles in Ordnung.

Ich denke, das ist, weil Multiprocessing-Modul versucht, Warteschlange aus meinem queue.py zu importieren, da sein Name mit einer Datei im Multiprocessing-Modul übereinstimmt.

Wenn es jedoch funktioniert, wie Python funktioniert, dann sollte ich Dateinamen aller möglichen internen Bibliotheken vermeiden, was nicht praktikabel ist.

Wird dieser Fehler auf den gleichen Dateinamen meiner Datei und einige Dateien im Multiprocessing-Modul zurückgeführt? Und wenn es so ist, wie kann ich sicherstellen, dass meine Dateinamen sich von Dateien einer möglichen Bibliothek in der allgemeinen Programmierung unterscheiden?

+1

Die 'Queue' kommt eigentlich aus dem' queue' Paket in der Standardbibliothek. –

+0

Dies ist in der Tat, wie Python funktioniert - überprüfen Sie http://StackOverflow.com/Questions/1224741/trying-to-import-Module-with-the-Same-Name-as-Abuilt-In-Module- Causes- an-import – daveruinseverything

+0

Dann sollte ich Namen einer möglichen Bibliothek vermeiden. Wie kann ich das machen? –

Antwort

2

Sie können nicht den gleichen Dateinamen wie das Modul haben, das Sie importieren. Lesen Sie die Module, um mehr Klarheit zu bekommen. Mit diesem Namen bezieht sich jeder schmucklose Paketname immer auf das oberste Paket. Sie müssen dann relative Importe verwenden, um auf Ihr eigenes Paket zuzugreifen. Sie möchten über Absolute and Relative Importe lesen, die genau dieses Problem beheben.

Verwandte Themen