Как заставить Python и distutils использовать правильный SDK на Mac OS X? - PullRequest
1 голос
/ 31 августа 2011

Я использую 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 install», который требует компиляции.

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

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

Прямо сейчас, когда я запускаю "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 на своем пути.

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

Большое спасибо.

Ответы [ 2 ]

4 голосов
/ 01 сентября 2011

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

2 голосов
/ 10 апреля 2012

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...