0

我被指派维护一个用 Python 编写的与 MySQL 交互的工具。用户通过使用不同版本 Python 的不同应用程序使用此工具。

有时,同一应用程序的软件版本之间的 Python 版本会发生变化。我们无法控制用户选择与之交互的应用程序(尽管它们都有 Python 接口并在 OS X 下运行),但除了 Python-MySQL 的问题外,我几乎可以正常工作。具体来说,某些软件使用 64 位版本的 Python。其他的则带有 32 位版本。OS X(我需要支持的操作系统)安装了 Python 和 Python-MySQL 32 位,所以如果我尝试:

import MySQLdb 

在使用 Python 64 位的软件中,导入失败,应用程序会说 OS X 附带的 MySQL 的二进制文件类型错误。

我已将 Python-MySQL 下载、编译并安装为 64 位应用程序,但 Python-MySQL 使用 Python 鸡蛋。似乎鸡蛋被硬编码为指向特定的磁盘位置。在我的机器上是/usr/local/lib/mysql.

如果我在该路径上有 64 位版本,那么我的工具适用于具有 Python 64 位的应用程序,但所有其他使用 32 位版本 Python 的工具都会失败。如果我在该磁盘位置有 32 位版本的 MySQL,则 32 位工具可以工作,而 64 位版本将停止执行我需要的操作。

我试图创建不同的鸡蛋并拥有一个 64 位版本,我将鸡蛋更改为指向,/usr/local/lib/mysql_x86_64但我不知道该怎么做。我还尝试在编译 Python-MySQL 以指向该位置时更改设置,但我找不到这样做的方法。

现在我正在谷歌上搜索我的生活,但如果我刚刚写的内容对任何人敲响了警钟,你介意启发我吗?

我根本不是 Python-MySQL 专家。

4

2 回答 2

0

使用virtualenv创建具有不同解释器的单独 python 环境。

python-MySQLdb 链接到您系统上安装的某个库。每个环境都可以链接到不同的位置。

于 2012-11-04T05:06:48.537 回答
0

在 OS X 上不需要有两个不同版本的 MySQL 客户端库。您可以安装一个通用版本,在同一个文件中同时包含 32 位和 64 位二进制文​​件。然后将 MySQLdb 适配器 (python-mysql) 的实例安装到您需要的每个 Python,链接到该库的一个通用版本。不幸的是,由于某种原因,MySQL 项目没有提供通用二进制文件。但建立自己很容易。我建议为 OS X 使用第三方包管理器,例如 Homebrew 或 MacPorts。我不了解 Homebrew,但我从个人经验中知道使用 MacPorts 非常简单。安装 MacPorts base后,您可以使用以下命令安装 MySQL 及其所有依赖项:

port install mysql5 +universal

+universal(通过编辑为所有端口创建默认变体更容易/opt/local/macports/variants.conf。)这会将 MySQL 客户端库安装到/opt/local/lib/mysql5/mysql/. 然后安装链接到该库目录的 python-mysql 包,而不是您可能在其他地方安装的任何包。

使用 MacPorts 安装完整的解决方案甚至更容易,即安装通用 Python、通用 MySQLdb 以及 MySQL 客户端库:

port install py27-mysql +universal

但是,如果您无法控制用户正在使用哪些 Python,那可能就没有用了。

于 2012-11-04T05:44:30.440 回答