【发布时间】:2017-02-13 03:54:14
【问题描述】:
以下简单脚本在 python3 中引发 ImportError:
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 的工作方式,那么我应该避免使用任何可能的内部库的文件名,这是不切实际的。
此错误是否归因于我的文件和多处理模块中的某个文件的相同文件名?如果是,我如何确保我的文件名与一般编程中任何可能的库的文件不同?
【问题讨论】:
-
Queue实际上来自标准库中的queue包。 -
这确实是 python 的工作原理——查看stackoverflow.com/questions/1224741/…
-
那么我应该避免使用任何可能的库的名称。我该怎么做?
-
只有您编写的模块位于模块搜索路径上才会有问题。如果您将模块放入包中,那么只有包名有与某些东西冲突的风险。