2010-09-28 17 views
13

He intentado compilar Python 2.7 en Ubuntu 10.4, pero hizo el siguiente mensaje de error después de realizar make:paquetes de Ubuntu necesarios para compilar Python 2.7

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's name. 

¿Qué paquetes necesito? (Setup.py no era útil)

+1

Intentaré ir a Synaptic y buscar en Python y descargar todos los kits de desarrollo, etc. – Scott

+2

Creo que esto sería mejor para unix.se, ubuntu.se, superuser o serverfault. – Chris

Respuesta

6

sudo apt-get build-dep python2.6 python-gdbm python-bsddb3 (Uso python2.7 de Maverick).

Para obtener más información, ver this answer. También mira this page, que se aplica igualmente para construir en Lucid.

+0

El paquete "build-dep" no se puede encontrar en mi sistema. – deamon

+0

Eso fue un error, lo arreglé hace un tiempo. –

5

Esos son los módulos de mayor edad, en su mayoría (amortizados) que probablemente no va a usar. Debería poder ignorar las advertencias de forma segura.

El que puede querer preocuparse por tratar de arreglar es _bsddb, que debería desaparecer una vez que instale Berkeley DB 4.8 ... No estoy seguro de si está en los repositorios de Ubuntu o no. (editar: aparentemente es el db package)

bsddb185 es una versión anterior del módulo Oracle Berkley Database. Puedes ignorarlo por lo que yo sé.

sunaudiodev se deprecia, no está documentado, dudo que alguna vez tenga que usarlo de todos modos. Debería poder ignorarlo con seguridad.

Espero que ayude un poco, de todos modos ...

+2

Mi lista de ignora en Linux es _tkinter, bsddb185, dl, imageop, sunaudiodev –

15

Asumiendo que usted tiene todas las dependencias instaladas (en Ubuntu que sería montón de cosas como sudo apt-get install libdb4.8-dev y varios otros paquetes -dev, entonces esta es la forma en que construyo . pitón

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 

Los únicos módulos que no se acumulan durante el maquillaje son:

_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 

siguiente que recoger todos los archivos .so que no se encuentren en el pitón directorios de instalación y copiarlos:

# 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 

Y a continuación, añadir setuptools una buena medida

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

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

En este punto me puedo hacer un archivo tar de/opt/python272 y ejecutarlo en cualquier 64 -bit Linux distro, incluso una versión reducida que no tiene ninguna de las dependencias instaladas, o una versión anterior que tiene versiones antiguas obsoletas de las dependencias.

También tengo pip instalado, pero en este momento hay una brecha en mis notas debido a algunas luchas fallidas con virtualenv. Básicamente virtualenv no es compatible con este escenario. Es de suponer que lo hice y luego 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} 

Después de que haya terminado la instalación de módulos, vuelvo y vuelva a ejecutar los comandos para recoger archivos .so, y hacer un nuevo archivo comprimido. Hubo un par de paquetes en los que tuve que rebuscar con LDFLAGS para que se instalaran correctamente, y aún no he hecho suficientes pruebas exhaustivas, pero hasta ahora funciona y estoy usando esta versión de Python para ejecutar aplicaciones de producción en máquinas que no tienen todas las bibliotecas de soporte preinstaladas.

+0

Un gran punto que el hecho de que un módulo no pueda ser encontrado cuando lo está construyendo no significa que lo necesite. –