MySQLdb 和 Python ImportError

Posted

技术标签:

【中文标题】MySQLdb 和 Python ImportError【英文标题】:MySQLdb and Python ImportError 【发布时间】:2015-01-20 07:00:54 【问题描述】:

我这辈子都想不通。我整天都在网上搜索,所有资源似乎都已经过时了。据我所知,让 mysqldb 和 Python 一起玩得很好是相当困难的。我已经尽我所能,但我不确定如何继续前进。

首先,我正在运行 Python 2.7

当我尝试在实时解释器中运行“import MySQLdb”时遇到的错误是:

ImportError: this is MySQLdb version (1, 2, 2, 'final', 0), but _mysql is version (1, 2, 5, 'final', 1)

当我运行“pip install mysql-python”时,我还会看到以下错误日志,但是我不确定这是否与版本不匹配有关。 http://pastebin.com/hqVv6aPZ

我有一个依赖于 MySQLdb 的 python 项目,我一直在尝试获取运行 Python 的 virtualenv 以正确安装包。这就是我所做的:

我已经从源代码构建了 MySQL,以确保我的机器上有一个 64 位兼容版本的 MySQL。我使用了 --universal 标志来确保这一点。 我已验证我也在运行 64 位版本的 Python。 MySQL 来自 Homebrew mysql-python 来自 pip

我一辈子都想不通在这里做什么。我的机器上似乎只有 MySQLdb 和 _mysql 之间的版本不匹配。是这样吗?如果是这样,解决方案是否只是重新安装旧版本的 MySQL?看来,当我强制 pip 安装 mysql-python 的 1.2.5 版本时,它会安装 MySQLdb 的 1.2.2 版本,所以我不知道在这里做什么,因为我不确定自制软件中的哪个包实际上与_mysql 版本 1.2.5。

编辑 -

系统路径

'/Users/XXXXXXXXXXX/virtualenvs/qa-automated-tests/lib/python27.zip',
'/Users/XXXXXXXXXXX/virtualenvs/qa-automated-tests/lib/python2.7',
'/Users/XXXXXXXXXXX/virtualenvs/qa-automated-tests/lib/python2.7/plat-darwin', 
'/Users/XXXXXXXXXXX/virtualenvs/qa-automated-tests/lib/python2.7/plat-mac', 
'/Users/XXXXXXXXXXX/virtualenvs/qa-automated-tests/lib/python2.7/plat-mac/lib-scriptpackages', '/Users/XXXXXXXXXXX/virtualenvs/qa-automated-tests/Extras/lib/python',
'/Users/XXXXXXXXXXX/virtualenvs/qa-automated-tests/lib/python2.7/lib-tk', 
'/Users/XXXXXXXXXXX/virtualenvs/qa-automated-tests/lib/python2.7/lib-old', 
'/Users/XXXXXXXXXXX/virtualenvs/qa-automated-tests/lib/python2.7/lib-dynload', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', 
'/Users/adam.stark/virtualenvs/qa-automated-tests/lib/python2.7/site-packages'

Python --version 表示我使用的是 2.7.5 版。我还将 pastebin 设置为 public。我只是不确定该转储中的相关信息到底是什么,它会返回 16 个错误。

【问题讨论】:

不管怎样,你运行的是苹果预装的 Python 吗?自制Python?不同的 Python,比如 python.org 二进制安装程序? shell 中的which pythonwhich pip 显示什么? Python 中的import sys; print sys.executable, sys.path 呢? 另外,_mysql 不是 MySQL 的一部分,它是 MySQLdb 的一部分。不知何故,你得到了 MySQLdb 1.2.2.0 的一部分和 1.2.5.1 的一部分。我的猜测是(a)您的系统站点包中有 1.2.2.0,然后您将 1.2.5.1 安装到您的虚拟环境中,但它只安装了部分,或者(b)您不知何故有两个不同的 Python 2.7 安装共享其站点包的一部分,并且 PATH 上的第一个 pip 和第一个 python 来自不同的 Python 安装。 这些日志中根本没有错误。有一堆警告,它们是 MySQLdb 应该在某些时候修复或解决的潜在 64 位错误,但它们在这里不相关。最后你可以看到它能够毫无问题地链接_mysql.so,然后它说“成功安装MySQL-python”。 同时,您还没有回答我最重要的问题:您运行的是预装的 Apple Python、Homebrew Python 还是其他什么? which python 来自 外部,virtualenv 会告诉你这一点,但不会来自内部。 好的,哪个 OS X 版本?从(我认为)10.8 开始,Apple 改变了他们分发内置额外电池的方式,有时尝试更新它们并不能正常工作。我知道他们不会在 10.9 中分发 MySQLdb(因为我现在在 10.9 的机器上),但我不知道是 10.8 还是 10.10……我知道这可能 不是你的问题,但最好排除它。 【参考方案1】:

这里的问题最终是几件事。正如 abarnert 在问题的 cmets 中指出的那样,系统 python 和 virtualenv python 混合在一起。为了解决这个问题,我必须将 PyDev 项目的项目属性更改为仅指向 virtualenv python 实例,然后在 PyDev 解释器首选项中我必须重建 PYTHONPATH。

完成此操作后,我必须在 virtualenv 中运行以下代码:

pip uninstall mysql-python 
pip install mysql-python==1.2.5

这解决了所有问题。

【讨论】:

你是如何重建python路径的? 如果我想使用更新的 mysql-python 怎么办? but _mysql is version (1, 2, 5, 'final', 1)_mysql对应的包是什么?是否可以更新/升级 _mysql【参考方案2】:

你可以试试这个。打开终端并输入:

sudo apt-get remove python-mysqldb
sudo apt-get install python-dev libmysqlclient-dev
git clone https://github.com/farcepest/MySQLdb1.git
python setup.py build
sudo python setup.py install

它对我有用。我使用 Python 2

【讨论】:

【参考方案3】:

我遇到了同样的问题,但出于不同的原因。我在我的工作机器(大学基础设施的一部分)上没有 root 权限。我必须通过发出在本地安装 MySQLdb pip install --user MySQL-python(来自这个guide)。这产生了相同的 ImportError: this is MySQLdb version (1, 2, 3, 'final', 0), but _mysql is version (1, 2, 5, 'final', 1) 不匹配。无法安装 1.2.5 版。

我做了什么:从 本地 卸载并重新安装版本 1.2.3,如错误所示

pip install --user MySQL-python==1.2.3

错误消失了。

【讨论】:

以上是在 Python 2.7 上测试的【参考方案4】:

执行此操作,然后重试

pip uninstall mysqlclient

【讨论】:

以上是关于MySQLdb 和 Python ImportError的主要内容,如果未能解决你的问题,请参考以下文章

Python 安装requests和MySQLdb

MySQLdb 和 Python ImportError

python导入(MySQLdb)和apache python_egg_cache的问题

导入错误:无法导入名称 get_importer

使用 Python 和 MySQLdb 将新用户添加到 Wordpress

Python3.4下安装pip和MySQLdb