Как заставить Python и distutils использовать правильный SDK на Mac OS X?

1

Я использую Python в Mac OS X версии 10.6. Недавно я установил новейший SDK разработчика для разработчиков Mac OS X, в котором есть GCC. SDK у меня есть:

$ ls /Developer/SDKs/
MacOSX10.4u.sdk MacOSX10.5.sdk  MacOSX10.6.sdk

Я хотел бы использовать Mac OS X 10.6 с Python/distutils, когда я устанавливаю пакет python с установкой setup.py, которая требует компиляции.

Я заметил, что 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

Как я могу это исправить? Я хотел бы использовать вместо этого 10.6 SDK.

Прямо сейчас, когда я запускаю "python setup.py install" в пакете, который требует компиляции C, он дает вызовы 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

который вызывает 10.5 SDK на своем пути.

Я использую установку Enthought Python Distribution Python в случае, если это имеет значение.

Огромное спасибо.

Теги:
macos
gcc
distutils

2 ответа

4
Лучший ответ

Это особенность и не должна вызывать у вас никаких забот. Distutils делает это намеренно, чтобы гарантировать, что модули расширения C, которые вы создаете, построены так же, как и используемый интерпретатор Python. Расширения, построенные таким образом, совместимы с повышением: они будут работать и на 10.6. Если вы абсолютно хотите использовать 10.6 функции ABI, вы должны использовать Python, который был создан с использованием 10.6 SDK, например, из недавнего 64-разрядного установщика python.org или из MacPorts или Homebrew.

2

Я полностью не согласен с @Ned Deily

Плакат, очевидно, использует Enthought Python Distribution (EPD), а установка всего нового Python потребует установки всего нового инфраструктура. У меня такая же ситуация. В MacBook с Mac Os X 10.6 проект (MeshPy) строит правильно, но на Imac с Mac OS X 10.7 он не работает (не предусмотрено 10.5 SDK, и этот SDK SDK был создан). Вы можете попробовать установить этот старый SDK, однако гораздо более простой взлом (надеюсь, он работает) заключается в создании символической ссылки:

    sudo ln -sf MacOSX10.6.sdk MacOSX10.5.sdk

Это сработало для меня.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню