Я пытаюсь установить пакет Python, для которого требуется запуск gcc 4.2. Мой gcc правильно указывает на gcc-4.2, т.е.

$ gcc -v
Using built-in specs.
Target: i686-apple-darwin10
Configured with: /var/tmp/gcc/gcc-5664~38/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Apple Inc. build 5664)

Однако мой питон построен с использованием gcc 4.0, т.е.

$ python
Python 2.5.4 (r254:67917, Dec 23 2008, 15:47:06) 
[GCC 4.0.1 (Apple Inc. build 5363)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

Есть ли способ пересобрать Python на GCC 4.2 без необходимости переустанавливать все мои пакеты Python?

Моя операционная система - Mac OS 10.6.

ПРИМЕЧАНИЕ: мне не поможет просто указать gcc на gcc-4.0 - мне нужно использовать gcc-4.2.

1
k-g-f 17 Авг 2010 в 12:31

2 ответа

Лучший ответ

В текущих версиях Pythons для OS X Distutils пытается обеспечить сборку модулей расширения C с использованием тех же GCC и MACOSX_DEPLOYMENT_TARGET (ABI), что и сам интерпретатор Python. Это гарантирует, что не будет конфликтов с базовыми системными библиотеками.

Но если вы используете OS X 10.6, то показываемая вами версия Python не является одной из поставляемых Apple Python, оба из которых построены с использованием gcc-4.2. Скорее всего, у вас установлена более старая версия python.org 2.5 с символическими ссылками на /usr/local/bin.

# OS X 10.6.4
$ /usr/bin/python -c 'import sys;print(sys.version)'
2.6.1 (r261:67515, Feb 11 2010, 00:51:29) 
[GCC 4.2.1 (Apple Inc. build 5646)]
$ /usr/bin/python2.6 -c 'import sys;print(sys.version)'  # same as above
2.6.1 (r261:67515, Feb 11 2010, 00:51:29) 
[GCC 4.2.1 (Apple Inc. build 5646)]
$ /usr/bin/python2.5 -c 'import sys;print(sys.version)'
2.5.4 (r254:67916, Feb 11 2010, 00:50:55) 
[GCC 4.2.1 (Apple Inc. build 5646)]
$ /usr/local/bin/python2.5 -c 'import sys;print(sys.version);print(sys.executable)'
2.5.4 (r254:67917, Dec 23 2008, 14:57:27) 
[GCC 4.0.1 (Apple Computer, Inc. build 5363)]
/Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python

which python сообщит вам, какой Python вызывается. Либо используйте абсолютный путь к нужному интерпретатору, либо измените PATH оболочки, либо удалите старый Python 2.5.

3
Ned Deily 17 Авг 2010 в 17:12

Скорее всего, это проблема с distutils, вам не нужно перекомпилировать python или переустанавливать какие-либо пакеты.

Вы проверили, какая версия установлена у вашей переменной среды CC? Он вполне может быть установлен на 4.0. Ты можешь попробовать:

export CC=gcc-4.2
python setup.py build

Вы также можете взглянуть на:

/Library/Frameworks/Python.framework/Versions/Current/lib/python2.5/config/Makefile

Отсюда distutils получает настройки сборки.

1
Andrew 17 Авг 2010 в 09:35