以下简单脚本在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中导入Queue,因为它的名称与多处理模块中的某个文件一致。
但是,如果它是python的工作方式,那么我应该避免任何可能的内部库的文件名,这是不切实际的。
此错误是否归因于我的文件的同一文件名和多处理模块中的某个文件?如果是,我怎样才能确保我的文件名与通用编程中任何可能库的文件不同?
答案 0 :(得分:2)
您输入的模块不能具有相同的文件名。 阅读模块以获得更多说明 使用它,任何未经修饰的包名称将始终引用顶级包。然后,您将需要使用相对导入来访问您自己的包。 您需要了解解决此问题的Absolute and Relative Imports。