如何让 Python 和 distutils 在 Mac OS X 上使用正确的 SDK?

2 python unix macos gcc distutils

我在 Mac OS X 版本 10.6 上使用 Python。我最近安装了最新的 Mac OS X 开发工具 SDK,其中包含 GCC。我拥有的 SDK 有:

$ ls /Developer/SDKs/
MacOSX10.4u.sdk MacOSX10.5.sdk  MacOSX10.6.sdk
Run Code Online (Sandbox Code Playgroud)

每当我使用需要编译的“setup.py install”安装 python 包时,我想将 Mac OS X 10.6 与 Python/distutils 一起使用。

我注意到 Python 将 -isysroot 标志和路径传递给 Mac OS X 10.5(不是 10.6),即:

$ python-config --cflags --ldflags
-I/Library/Frameworks/EPD64.framework/Versions/7.0/include/python2.7 -I/Library/Frameworks/EPD64.framework/Versions/7.0/include/python2.7 -fno-strict-aliasing -fno-common -dynamic -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.5.sdk -DNDEBUG -g -O3 -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.5.sdk -I/Library/Frameworks/EPD64.framework/Versions/7.0/include
-L/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/config -ldl -framework CoreFoundation -lpython2.7 EPD64.framework/Versions/7.0/Python
Run Code Online (Sandbox Code Playgroud)

我该如何纠正这个问题?我希望它改用 10.6 SDK。

现在,当我在需要 C 编译的包上运行“python setup.py install”时,它会生成对 GCC 的调用,如下所示:

gcc -fno-strict-aliasing -fno-common -dynamic -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.5.sdk -DNDEBUG -g -O3 -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.5.sdk -I/Library/Frameworks/EPD64.framework/Versions/7.0/include -DHAVE_RINTF=1 -DHAVE_FINITE=1 -DHAVE_EXPM1=1 -DHAVE_RINT=1 -DHAVE_LOG2=1 -DHAVE_LOGBL=1 -DHAVE_SNPRINTF=1 -DHAVE_LOG1P=1 -DHAVE_ROUND=1 -DHAVE_FMIN=1 -Iinclude -Isrc/lapack -Isrc/f2c -I/Library/Frameworks/EPD64.framework/Versions/7.0/include/python2.7 -c src/f2c/signal_.c -o build/temp.macosx-10.5-x86_64-2.7/src/f2c/signal_.o
Run Code Online (Sandbox Code Playgroud)

它在其路径中调用 10.5 SDK。

我使用 Python 的 Enthought Python Distribution 安装,以防产生影响。

非常感谢。

Ned*_*ily 6

这是一项功能,不应让您担心。Distutils 故意这样做是为了确保您构建的 C 扩展模块的构建方式与正在使用的 Python 解释器的构建方式相同。以这种方式构建的扩展是向上兼容的:它们也可以在 10.6 上运行。如果您绝对想使用 10.6 ABI 功能,则应该使用使用 10.6 SDK 构建的 Python,例如,来自最新的 python.org 64 位安装程序或来自 MacPorts 或 Homebrew。