导入错误:没有名为queue的模块

1 投票
2 回答
14808 浏览
提问于 2025-04-18 16:21

我正在尝试让我的Python脚本在我的Synology上运行。这个应用程序使用的是Oracle的MySQL框架Connector/Python,我通过在Connector/Python的跨平台版本上运行python setup.py install来安装它。

我在我的Windows电脑上通过.msi安装程序安装了Connector/Python,运行得非常顺利。但是每次我在Synology上运行它时,都会出现这个错误:

File "MyApplication.py", line 3, in <module>
    from DatabaseConnection import DatabaseConnection
  File "/volume1/public/Python/MyApplication/DatabaseConnection.py", line 3, in <module>
    import mysql.connector
  File "/usr/local/lib/python2.7/site-packages/mysql/connector/__init__.py", line 42, in <module>
    from mysql.connector.pooling import (
  File "/usr/local/lib/python2.7/site-packages/mysql/connector/pooling.py", line 29, in <module>
    import queue
ImportError: No module named queue

我发现这里有两个问题:

  • 我需要某种队列库。我该从哪里获取呢?我的Windows电脑上已经有了。
  • 根据我在网上查找的信息,队列库应该叫Queue,而不是queue,这是针对Python 2.7的。但是Connector/Python的跨平台版本并没有说明它应该运行在哪个版本上。

为了澄清,我没有任何版本的队列库(也就是Queue.pyqueue.py)。

我该如何解决这个问题呢?

2 个回答

3

你下载的这个应用是为Python 3设计的,而你电脑上安装的是Python 2。

这个平台无关的压缩包里有Python 2和Python 3版本的连接器,里面的metasetupinfo.py文件有个检查:

if sys.version_info >= (3, 1):
    sys.path = ['python3/'] + sys.path
    package_dir = { '': 'python3' }
elif sys.version_info >= (2, 6) and sys.version_info < (3, 0):
    sys.path = ['python2/'] + sys.path
    package_dir = { '': 'python2' }
else:
    raise RuntimeError(
        "Python v%d.%d is not supported" % sys.version_info[0:2])

出于某种原因,这个检查在你的平台上默认选择了Python 3,所以安装了不正确的库版本。

Oracle MySQL连接器有一些独特的功能(比如,它为django提供了一个优化的驱动),但如果你不需要这些功能,安装mysql-python(也就是MySQLdb驱动)也完全没问题。

0

我最开始的问题其实没找到解决办法,不过我最后把SQL的交流部分提取出来,做成了一个用PHP开发的JSON接口。然后,Python脚本就用到了urllibjson这两个模块,来发送HTTP请求和解析数据。

撰写回答