【问题标题】:Cannot initiate Queue in python3 [duplicate]无法在python3中启动队列[重复]
【发布时间】: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/…
  • 那么我应该避免使用任何可能的库的名称。我该怎么做?
  • 只有您编写的模块位于模块搜索路径上才会有问题。如果您将模块放入包中,那么只有包名有与某些东西冲突的风险。

标签: python module


【解决方案1】:

您不能使用与要导入的模块相同的文件名。 阅读模块以获得更多说明 使用它,任何未经修饰的包名称将始终引用顶级包。然后,您将需要使用相对导入来访问您自己的包。 您将需要阅读有关解决此问题的 Absolute and Relative Imports。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 2016-02-05
    • 2019-09-21
    相关资源
    最近更新 更多