Сборка Python 2.6 под FreeBSD : Установка Python из исходных кодов


Решил я тут установить себе Python 2.6. В портах его нет, а из исходных текстов Python под FreeBSD всегда ставился не охотно. Пришлось разобраться.

Проблема
При сборке Python под FreeBSD make выдаёт сообщение:

gcc -shared build/[…]/Modules/_cursesmodule.o \
-L/usr/local/lib -lncursesw -o build/[…]/_curses.so
Segmentation fault (core dumped)
*** Error code 139

Stop in /usr/home/c/py26/trunk.

и на этом процесс останавливается (длинные пути я заменил многоточиями, а длинную строку разорвал символом «\»).

При этом на диске появляется python.core.

Решение
Это происходит из-за своеобразия библиотек FreeBSD. Решение таково:

# Для начала получаем исходные тексты Python (у вас их ещё нет?)
svn checkout http://svn.python.org/projects/python/trunk

# Заходим в директорию с исходниками
cd trunk

# Стандартный шаг
./configure —prefix=/home/c/py26/local

Теперь в директории Modules появился файл Setup. Его надо поправить руками.
Находим в нём строку

#readline readline.c -lreadline -ltermcap

И изменяем её вот так:

readline readline.c -lreadline

Возвращаемся в корень дерева исходных текстов и запускаем make.

Её работа завершится с примерно такой ошибкой:

libpython2.6.a(posixmodule.o)(.text+0x3cc4): In function posix_tmpnam':
./Modules/posixmodule.c:6949: warning: warning: tmpnam() possibly used
unsafely; consider using mkstemp()
libpython2.6.a(posixmodule.o)(.text+0x3c1e): In function posix_tempnam':
./Modules/posixmodule.c:6902: warning: warning: tempnam() possibly used
unsafely; consider using mkstemp()
libpython2.6.a(config.o)(.data+0x4c): undefined reference to initreadline'
*** Error code 1

Stop in /usr/home/c/py26/trunk.

Но в этом нет ничего страшного. Запускаем make повторно. (Сбой происходит из-за не правильного порядка компиляции.) Теперь make проходит до конца без ошибок и предупреждений.

Остаётся сделать

make install

Всё. Новёхонький Python 2.6 установлен, можно наслаждаться. Особого внимания заслуживает опция -3. При указании этой опции Python начинает выдавать предупреждения на все конструкции, которые не будут работать в Python-3000.


Комментарии запрещены.




Статистика