【问题标题】:How do I compile python extensions for Mac OS X 10.5, on Mac OS X 10.6?如何在 Mac OS X 10.6 上为 Mac OS X 10.5 编译 python 扩展?
【发布时间】:2012-11-10 05:13:41
【问题描述】:

我正在尝试在 Mac OS X 10.6 上编译各种 python 扩展(pycrypto、paramiko、subvertpy...),以便它们与 Mac OS X 10.5 及其内置的 python 2.5 兼容,用于包括在针对 Mac OS X 10.5 的产品安装程序中。

我真的不知道该怎么做。我在 Google 上搜索并找到了 a question here on *,这导致我在构建之前在我的环境中设置 MACOSX_DEPLOYMENT_TARGET=10.5,但这只是给了我错误:

distutils.errors.DistutilsPlatformError: $MACOSX_DEPLOYMENT_TARGET 不匹配:在配置期间现在为“10.5”但为“10.6”

我在 Mac OS X 10.6 上使用 python2.5 运行构建,例如:

$ python2.5 setup.py 安装

我还遇到了对 /Developer/SDKs/MacOSX10.5.sdk 的引用,但我不确定如何使用它。

【问题讨论】:

  • 您是否也在 Snow Leopard 上使用 Python 2.5 ?我认为捆绑的是 2.6,我很确定您将无法使用 2.6 构建适用于 2.5 的扩展...
  • 我使用 python2.5 可执行文件来运行构建。

标签: python macos cross-compiling


【解决方案1】:

我设法让 distutils 相信 Python 是在 Leopard 上构建的,方法是在 setup.py 中调用 setup() 之前插入以下代码:

# XXXHACK: make distutils believe that Python was built on Leopard.
from distutils import sysconfig
their_parse_makefile = sysconfig.parse_makefile
def my_parse_makefile(filename, g):
    their_parse_makefile(filename, g)
    g['MACOSX_DEPLOYMENT_TARGET'] = '10.5'
sysconfig.parse_makefile = my_parse_makefile

在将 MACOSX_DEPLOYMENT_TARGET 设置为“10.5”之后,pycrypto 使用 python2.5 在 Snow Leopard 上构建良好。我不能保证它会很好地工作,但是 pycrypto 的捆绑测试套件在我运行 Leopard 的 Macbook Air 上通过了这个构建,所以看起来没问题。

【讨论】: