在OSX上pip安装MySQL-python后出现版本错误

1 投票
2 回答
753 浏览
提问于 2025-04-18 14:51

我已经成功在我的虚拟环境中安装了 MySQL-python,而且通过 PyCharm 能够导入它来确认这一点。不过,我收到了这个信息:

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

我的安装步骤是:

  • 在终端中激活我的虚拟环境(venv)
  • export PATH=$PATH:/usr/local/mysql/bin
  • export CFLAGS=-Qunused-arguments export CPPFLAGS=-Qunused-arguments
  • pip install MySQL-python

这个过程显示安装成功。但我真的不明白问题出在哪里,是不是 pip 给我提供了一个损坏的目录?

我试着在网上搜索解决办法,但没有找到有效的。然后我尝试从 sourceforge 下载 1.2.4b4 版本,并在虚拟环境中构建它。结果出现了以下错误:

ld: warning: ignoring file /usr/local/Cellar/mysql/5.6.19/lib/libmysqlclient_r.dylib, file was built for x86_64 which is not the architecture being linked (i386): /usr/local/Cellar/mysql/5.6.19/lib/libmysqlclient_r.dylib

我在 mysql 和 python 上运行了 file $(which ),返回了 mysql 是 64 位版本,而 python 有 32 位和 64 位两个版本。

我真的不知道接下来该怎么做,非常希望能得到一些帮助,如果我遗漏了什么,请告诉我!谢谢

编辑:

我用 pip uninstall MySQL-python 卸载了 MySQL-python,然后尝试用这个压缩包:https://pypi.python.org/pypi/MySQL-python/1.2.5

pip install -Iv https://pypi.python.org/packages/source/M/MySQL-python/MySQL-python-1.2.5.zip#md5=654f75b302db6ed8dc5a898c625e030c

结果给了我和之前一样的错误,提示 MySQLdb 是 1.2.4b4 版本,但 _mysql 是 1.2.5。这让我觉得可能还有一个未被卸载的 MySQL-python 版本。请问我该怎么测试这个呢?谢谢!

2 个回答

0

感谢上面的回答,这对将来遇到问题的人很有帮助。我通过重新安装1.2.5版本并重启我的编译器解决了这个问题。

换句话说,我上面提到的方法应该是有效的。为了以后能顺利进行,确保你的bin/activate和bin/pip的路径是指向你的虚拟环境,而不是你开发团队中其他人的环境。

0

这里有几个常见的问题:

  • 确保你的路径是正确的,并且 pippython 指向的是同一个解释器。虚拟环境最好通过 source activate <NAME> 来激活,或者把它们放在路径前面,而不是后面。
  • 我在使用 MySqlSB 时遇到了很多问题,Stack Overflow 上也有很多相关的问题。当我换成 pymysql 后,所有问题都解决了。因为 pymysql 的接口和 mysqldb 完全兼容。更棒的是,它有一个方法 install_as_MySQLdb(),可以让 pymysql 看起来就像是 mysqldb,这样所有依赖后者的包都能和前者一起工作。

我在 OSX 上设置环境的步骤是:

  • 先卸载所有的 Python 安装(系统自带的 Python、Homebrew 安装的等)。
  • brew install mysql gcc。这里的 gcc 是为了你如果想编译 cfortran 扩展到 Python 模块时用的。
  • 注意权限错误——总是运行 brew doctor 来检查。
  • 安装 anaconda
  • 设置一个虚拟环境 conda create -n <NAME> python=3.4
  • 激活虚拟环境 source activate <NAME>
  • 安装所需的包,优先用 conda,如果没有再用 pip。比如,我总是先用 conda install numpy,这样就不用自己编译了,然后用 pip install pymysql

撰写回答