Construyendo Python y más en módulos faltantes

Tengo otro hilo pidiendo ayuda en “zlib faltante”. Con la ayuda agradable el problema se ha resuelto (casi).

Ahora estoy interesado en construir Python (en Ubuntu 10.10).

Algunas preguntas importantes han llamado mi atención:

  1. Después de comstackr Python (por ejemplo, 2.7.1), ¿necesito reconstruir Python si me faltan módulos?

  2. ¿Hay alguna forma de averiguar qué módulos faltan antes de construir Python? Decir sqlite3. Tengo instalado sqlite3 para el sistema por defecto (Python 2.6.6), y puedo importarlo en el shell de Python 2.6.6. Ahora uso pythonbrew para comstackr 2.7.1, y en el shell no puedo importar sqlite3 porque _sqlite3 no está disponible. Estoy seguro de que faltan algunos más importantes que necesito para futuros desarrollos (como Django ..).

Estoy dispuesto a aprender a construir sin usar Pythonbrew .

Comparta conmigo su experiencia en la creación de otra versión de Python, y ¿cómo abordaría el problema de los módulos faltantes? ¿Hay una solución práctica para construir Python?

Nunca me he molestado en construir uno, así que por favor tengan paciencia conmigo. ¡Estoy empezando a darme cuenta de la importancia de aprender y construir uno mismo! ¡Muchas gracias!


EDITAR

Primero les agradezco todas sus aportaciones. Significaban mucho. Yo hice el edificio.

Python build finished, but the necessary bits to build these modules were not found: _bsddb _curses _curses_panel _tkinter bsddb185 bz2 dbm gdbm readline sunaudiodev _sqlite3 To find the necessary bits, look in setup.py in detect_modules() for the module's name. 

Tengo sqlite3 y readline por

 sudo apt-get install libreadline6 libreadline6-dev sudo apt-get install libsqlite3-dev 

Intenté importarlos, pero aún así “no hay un módulo con nombre xxxx”.

En AskUbuntu , en realidad le pregunté a la gente cómo obtener comandos previos porque no podía usar esa función cuando estoy en el shell Python 2.7.1. Creo que se debe a readline. Readline

Instalé Python-2.7.1 en este directorio: / home / jwxie518 / python27 /

Busqué en setup.py, encontré las siguientes líneas:

 # The sqlite interface sqlite_setup_debug = False # verbose debug prints from this script? # We hunt for #define SQLITE_VERSION "nnn" # We need to find >= sqlite version 3.0.8 sqlite_incdir = sqlite_libdir = None sqlite_inc_paths = [ '/usr/include', '/usr/include/sqlite', '/usr/include/sqlite3', '/usr/local/include', '/usr/local/include/sqlite', '/usr/local/include/sqlite3', ] 

Todos los caminos enumerados arriba no existen. Entonces, ¿supongo que tengo que instalar sqlite3 manualmente? Tengo otra referencia aquí (sin embargo, está en chino)

 # Download the latest and extract # Go into the extracted directory ./configure --prefix=/home/jwxie518/python27/python make && make install # Then edit python-2.7 's setup.py before rebuild it # Sample (add these two lines to the end....) '~/share/software/python/sqlite-3.6.20/include', '~/share/software/python/sqlite-3.6.20/include/sqlite3', # Then rebuild python like how we did before 

Entré en mi directorio donde instalé sqlite3. Encontré include / sqlite3.h solamente. Así que volví y comprobé / usr / include / . Sólo puedo encontrar sqlite3.h también.

Entonces, ¿qué está pasando aquí? Readline tampoco es importable.


3ª EDICIÓN Comencé todo de nuevo, excepto que no reinstalé sqlite3.

 # Extract Python-2.7.1 # cd into Python-2.7.1 # ./configure make >make.out 2>&1 less make.out 

make.out está aquí: http://pastebin.com/raw.php?i=7k3BfxZQ

Todavía no podía importar sqlite3. Así que entré en setup.py e hice cambios:

 # We hunt for #define SQLITE_VERSION "nnn" # We need to find >= sqlite version 3.0.8 sqlite_incdir = sqlite_libdir = None sqlite_inc_paths = [ '/usr/include', '/usr/include/sqlite', '/usr/include/sqlite3', '/usr/local/include', '/usr/local/include/sqlite', '/usr/local/include/sqlite3', '/home/jwxie518/python-mod/include/sqlite', '/home/jwxie518/python-mod/include/sqlite3', ] 

Entonces otra vez, corrí todo (esta vez también lo hice limpio )

La salida está aquí: http://pastebin.com/raw.php?i=8ZKgAcWn

De acuerdo con la salida, no creo que se incluya la ruta personalizada … (para obtener una salida completa, vaya al enlace de arriba y busque sqlite)

build / temp.linux-i686-2.7 / home / jwxie518 / Python-2.7.1 / Modules / _sqlite / util.o -L / usr / lib -L / usr / local / lib -Wl, -R / usr / lib -lsqlite3 -o build / lib.linux-i686-2.7 / _sqlite3.so

Todavía no puedo importar sqlite3.

¡Gracias!


Muchas gracias, Michael Dillon, por ayudarme. Tu tutorial fue limpio y claro.

Resolví el problema tan pronto como me di cuenta de que cada vez que probaba Python-2.7.1, estaba usando el instalado por Pythonbrew.

La moraleja de la historia es leer todos los errores. Desatendí los errores generados al importar sqlite3. El instalado por Pythonbrew no tenía instalado sqlite3. El paquete de desarrollo para sqlite3 se instaló después de que Pythonbrew instaló Python-2.7.1

Gracias.

Aquí es cómo construir Python y corregir las dependencias. Supongo que desea que este Python esté completamente separado del lanzamiento de Ubuntu Python, por lo que estoy especificando la opción –prefix para instalarlo todo en / home / python27 usando el diseño estándar de Python, es decir, paquetes de sitio en lugar de dist paquetes

 1. Get the .tar.gz file into your own home directory. 2. tar zxvf Py*.tar.gz 3. cd Py*1 4. ./configure --prefix=/home/python27 5. make 6. make install 

El paso 5 es el importante. Al final, mostrará una lista de los módulos que no se pudieron construir correctamente. A menudo se puede solucionar esto instalando un paquete de Ubuntu y ejecutando nuevamente make.

 a. sudo apt-get install something-dev b. make 

Es bastante común tener un problema porque le falta el complemento -dev a algún módulo u otro. Pero a veces deberías empezar de nuevo así:

 a. make clean b. ./configure --prefix=/home/python27 c. make 

Comenzar de nuevo nunca duele si no está seguro. Una nota importante sobre el paso 6. No estoy usando sudo en este comando, lo que significa que necesitará tener el directorio / home / python27 ya creado con la propiedad correspondiente.

No dudes en probar ./configure --help |less antes de construir algo porque puede haber opciones interesantes que puedas usar. Una vez en una distribución mínima tuve que hacer –with-dbmliborder = gdbm: bdb para que gdbm funcione. Cuando ejecute ./configure, las últimas líneas le indicarán dónde colocará la información que aprendió. En el caso de Python, Módulos / Configuración ha sido útil para descubrir cómo construir un módulo.

Otra cosa útil es make clean y luego ejecutar make >make.out 2>&1 para capturar toda la salida del proceso completo de make. Luego, una vez que esté completo, use less o un editor para buscar los detalles en un módulo problemático como _sqlite. Por ejemplo, verifique todas las opciones -I que se pasan a gcc . Si el directorio de inclusión correcto no está en la lista, podría causar un problema. Puede editar setup.py para cambiar la lista de directorios de inclusión.

En el pasado, era más común tener problemas de biblioteca que se solucionaban al cerrar sesión, volver a iniciar sesión y ejecutar “sudo ldconfig” antes de realizar una reconstrucción completa.