【问题标题】:mysql-python: building a completely standalone _mysql.so on Mac OS X?mysql-python:在 Mac OS X 上构建一个完全独立的 _mysql.so?
【发布时间】:2010-12-30 07:04:10
【问题描述】:

我在 VMware Fusion 下的 Linux VM (Ubuntu 9.10) 中运行数据库服务器,但在 Mac 端编码 Django。安装mysql-python需要在Mac上安装MySQL才能将_mysql.so编译成site-packages

但是,完成后,我对 Mac 端的 MySQL 没有进一步使用,宁愿将其删除。当然,当_mysql.so需要/usr/local/mysql/lib/libmysqlclient_r.16.dylib时,这是不可能的。

mysql-python 的site.cfg 中有一个“静态”选项,当设置为“true”时,会显着增加_mysql.so 文件的大小,但它仍然取决于.dylib。

有没有办法让 .so 完全独立于是否安装了 MySQL,即使这意味着文件很大?

该解决方案(如果存在)应该适用于 10.5 和 10.6,因为我暂时将在不同的机器上使用这两个版本。

【问题讨论】:

    标签: python mysql macos static compilation


    【解决方案1】:

    没关系,经过更多挖掘后发现自己。实际上,这很简单;我会在这里记录解决方案以防其他人需要它:

    1. 从 mysql.com 获取 MySQL 的源 tarball(不是特定于平台的二进制 tarball)

    2. 解压,使用适合您目的的任何选项运行./configure,但您需要--enable-static。可以肯定的是,我包括了--disable-shared,尽管它可能不是绝对必要的。我使用了以下内容,您的可能在其他方面有所不同:

      $ ./configure --prefix=/usr/local/mysql-src/ --enable-static --disable-shared --with-charset=utf8 --with-extra-charsets=ascii,binary,latin1 --with-collation=utf8_general_ci
      $ make
      $ sudo make install

      (关于这里的字符集和排序规则参数:在这个用例中它们可能完全没有必要,因为之后我将删除 MySQL,但是由于所有客户端连接都使用一些字符集/排序规则,所以我将覆盖我的基础UTF-8 - 以防万一 MySQLdb 使用的默认字符集/排序规则受到 _mysql.so 编译方式的影响——比我更聪明的人可能想以一种或另一种方式确认。)

    3. http://pypi.python.org/pypi/MySQL-python获取最新的mysql-python源码包

    4. 解压,并在site.cfg 中设置static = Truemysql_config = /usr/local/mysql-src/bin/mysql_config(或您在configure 期间选择的任何路径)。

    5. 运行python setup.py build。编译结束时可能会出现一些架构相关的错误,但可以忽略。

    6. 运行sudo python setup.by install。这会在您的 site-packages 目录中创建一个 .egg 并将其添加到 easy_install.pth 文件中。

    7. 你已经完成了!您现在可以删除 MySQL 的所有痕迹以及 mysql-python 源。鸡蛋可以按原样复制到运行相同版本 OS X 的其他 Mac 上。我很乐意将它复制到使用 virtualenv 创建的各种虚拟环境中。

    这在 10.5 上有效,我很快会在 10.6 上对其进行测试,如果需要做不同的事情,请在此处报告结果。

    【讨论】:

    • 按照指示在 10.6 上运行良好。
    • 我发现静态构建需要--disable-shared
    • 我必须添加这些环境变量 CFLAGS=-fPIC CXXFLAGS=-fPIC 来配置。否则构建 MySQLdb 将失败。
    【解决方案2】:

    我来到这里试图在旧的 linux 上构建一个静态 MySQLdb。我发现 MySQL 已经过渡到 cmake:

    我能够像这样构建一个静态 mysql:

    # set INSTALL to taste, run from where you extracted the tar file
    SOURCE=$(pwd) && mkdir bld && cd bld &&
    cmake -DCMAKE_INSTALL_PREFIX=$INSTALL -DWITH_PIC=ON -DDISABLE_SHARED=ON \
          -DDEFAULT_CHARSET=utf8 -DEXTRA_CHARSETS=ascii,binary,latin1 \
          -DDEFAULT_COLLATION=utf8_general_ci \
          $SOURCE
    

    请注意“WITH_PIC=ON”和“DISABLE_SHARED=ON”,这似乎违反直觉,但要构建可动态加载的 MySQLdb python 模块,所有 mysql 静态库都需要使用 -fPIC 构建。

    【讨论】:

      猜你喜欢
      • 2016-12-12
      • 2012-04-05
      • 2012-12-17
      • 2013-04-17
      • 2013-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多