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