Пакеты Ubuntu, необходимые для компиляции Python 2.7

Я попытался скомпилировать Python 2.7 на Ubuntu 10.4, но получил следующее сообщение об ошибке после запуска make:

Python build finished, but the necessary bits to build these modules were not found:
_bsddb             bsddb185           sunaudiodev     
To find the necessary bits, look in setup.py in detect_modules() for the module name.

Какие пакеты мне нужны? (setup.py не помогло)

Ответы

Ответ 1

Предполагая, что у вас установлены все зависимости (в Ubuntu это будет куча таких вещей, как sudo apt-get install libdb4.8-dev и различные другие -dev-пакеты, тогда я создаю Python.

tar zxvf Python-2.7.1.tgz
cd Python-2.7.1

# 64 bit self-contained build in /opt
export TARG=/opt/python272
export CC="gcc -m64" 
export LDFLAGS='-Wl,-rpath,\$${ORIGIN}/../lib -Wl,-rpath-link,\$${ORIGIN}/../lib -Wl,--enable-new-dtags'
./configure --prefix=$TARG --with-dbmliborder=bdb:gdbm --enable-shared --enable-ipv6
make
make install

Единственными модулями, которые не создаются во время make, являются:

_tkinter - I don't do GUI apps and would use wxWindows if I did
bsddb185 - horribly obsolete version of bdb
dl - deprecated in 2.6              
imageop - deprecated in 2.6
sunaudiodev - obsolete interface to some SparcStation device I think

Далее я собираю любые .so файлы, которые еще не находятся в папках установки Python и копируют их:

# collect binary libraries ##REDO THIS IF YOU ADD ANY ADDITIONAL MODULES##
cd /opt/python272
find . -name '*.so' | sed 's/^/ldd -v /' >elffiles
echo "ldd -v bin/python" >>elffiles
chmod +x elffiles
./elffiles | sed 's/.*=> //;s/ .*//;/:$/d;s/^              *//' | sort -u | sed 's/.*/cp -L & lib/' >lddinfo
# mkdir lib
chmod +x lddinfo
./lddinfo

И затем добавьте setuptools для хорошей оценки

#set the path
export PATH=/opt/python272/bin:$PATH

#install setuptools
./setuptools-0.6c11-py2.7.egg

В этот момент я могу сделать tarball/opt/python272 и запустить его на любом 64-разрядном дистрибутиве Linux, даже нарезанный, который не имеет ни одной из установленных зависимостей, или более старый дистрибутив, который имеет старые устаревшие версии зависимостей.

Я также установил pip, но на данный момент в моих заметках есть пробел из-за некоторых неудачных попыток с virtualenv. В принципе virtualenv не поддерживает этот сценарий. Предположительно, я сделал easy_install pip, а затем:

export LD_RUN_PATH=\$${ORIGIN}/../lib
pip install cython
pip install {a whole bunch of other libraries that I expect to use}

После того, как я закончил установку модулей, я возвращаюсь и повторно запускаю команды для сбора .so файлов и создания нового tarball. Было несколько пакетов, в которых мне приходилось гасить с помощью LDFLAGS, чтобы они правильно устанавливались, и я еще не провел достаточно тщательного тестирования, но пока это работает, и я использую эту сборку Python для запуска производства приложений на машинах, на которых не установлены все поддерживаемые библиотеки.

Ответ 2

sudo apt-get build-dep python2.6 python-gdbm python-bsddb3 (используйте python2.7 для maverick).

Для получения дополнительной информации см. этот ответ. Также смотрите эту страницу, которая одинаково применима для создания на Lucid.

Ответ 3

Это более старые, (в основном, амортизированные) модули, которые вы, вероятно, не будете использовать. Вы должны быть в состоянии безопасно игнорировать предупреждения.

Тот, который вы можете беспокоиться о попытке исправить, - это _bsddb, который должен уйти после установки Berkeley DB 4.8... Я не уверен, что это в репозиториях Ubuntu или нет. (отредактируйте: по-видимому это пакет db)

bsddb185 - это более старая версия модуля базы данных Oracle Berkley. Вы можете смело игнорировать его, насколько мне известно.

sunaudiodev обесценивается, недокументирован, я сомневаюсь, что вам когда-нибудь понадобится его использовать. Вы должны быть в состоянии безопасно игнорировать его.

Надеюсь, что это поможет, во всяком случае...