Сборка 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 139Stop 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 1Stop in /usr/home/c/py26/trunk.
Но в этом нет ничего страшного. Запускаем make повторно. (Сбой происходит из-за не правильного порядка компиляции.) Теперь make проходит до конца без ошибок и предупреждений.
Остаётся сделать
make install
Всё. Новёхонький Python 2.6 установлен, можно наслаждаться. Особого внимания заслуживает опция -3. При указании этой опции Python начинает выдавать предупреждения на все конструкции, которые не будут работать в Python-3000.