2017-02-13 20 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,那么一切都很好。

我认为这是因为多处理模块试图从我的queue.py中导入队列,因为它的名称与多处理模块中的某个文件一致。

但是,如果是python的工作方式,那么我应该避免任何可能的内部库文件名,这是不实际的。

此错误是否归因于我的文件和多处理模块中的某个文件的相同文件名?如果是这样,我如何确保我的文件名与通用编程中任何可能的库文件不同?

+1

'Queue'实际上来自标准库中的'queue'包。 –

+0

这确实是如何蟒蛇工作 - 检查出http://stackoverflow.com/questions/1224741/trying-to-import-module-with-the-same-name-as-a-built-in-module-causes- an-import – daveruinseverything

+0

然后我应该避免任何可能的库的名称。我怎样才能做到这一点? –

回答

2

您不能使用与您要导入的模块相同的文件名。 阅读模块以获得更多说明 使用该模块时,任何未修改的软件包名称将始终引用顶层软件包。然后您将需要使用相对导入来访问您自己的软件包。 你会想要阅读关于Absolute and Relative进口哪些解决这个问题。