python - barplot - pandas plot
Construyendo Python y más en módulos faltantes (1)
Tengo otro hilo pidiendo ayuda sobre "missing zlib". Con la buena ayuda, el problema se ha resuelto (casi).
Ahora estoy interesado en construir Python yo mismo (en Ubuntu 10.10).
Algunas preguntas importantes me han llamado la atención:
Después de construir Python (digamos 2.7.1), ¿necesito reconstruir Python si tengo módulos faltantes?
¿Hay alguna forma de averiguar qué módulos faltarán antes de compilar Python? Diga sqlite3. Tengo sqlite3 instalado para el sistema predeterminado (Python 2.6.6), y puedo importarlo al shell de Python 2.6.6. Ahora uso pythonbrew para construir 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 el desarrollo futuro (como Django ...).
Estoy dispuesto a aprender a construir sin usar pythonbrew .
Por favor, comparte conmigo tu experiencia en la construcción de otra versión de Python, y ¿cómo abordarías el problema de los módulos faltantes? ¿Hay alguna solución práctica para construir Python?
Nunca me he molestado en construir uno, así que por favor tengan paciencia conmigo. ¡Estoy comenzando a darme cuenta de la importancia de aprender y construir uno yo mismo! ¡Muchas gracias!
EDITAR
Primero, les agradezco todas sus aportaciones. Significaron 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.
Obtuve sqlite3 y me lejé por
sudo apt-get install libreadline6 libreadline6-dev
sudo apt-get install libsqlite3-dev
Traté de importarlos, pero aún así "no named module xxxx".
En AskUbuntu , en realidad le pregunté a la gente cómo obtener comandos anteriores porque no podía usar esa característica cuando estoy en el shell de Python 2.7.1. Creo que se debe leer. Readline
Instalé el Python-2.7.1 bajo este directorio: / home / jwxie518 / python27 /
Miré 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 "n.n.n"
# 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'',
]
Todas las rutas enumeradas anteriormente no existen. ¿Entonces supongo que tengo que instalar sqlite3 manualmente? Tengo otra referencia here (está en chino, sin embargo)
# 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
Fui a mi directorio donde instalé sqlite3. Encontré include / sqlite3.h solamente. Así que volví y compruebo / usr / include / . Solo puedo encontrar sqlite3.h también.
Entonces, ¿qué está pasando aquí? Readline tampoco es importable.
3ra edición Empecé 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 pude importar sqlite3. Así que entré a setup.py e hice cambios:
# We hunt for #define SQLITE_VERSION "n.n.n"
# 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'',
]
Por otra parte, corrí todo (esta vez también hice limpio )
La salida está aquí: http://pastebin.com/raw.php?i=8ZKgAcWn
De acuerdo con el resultado, no creo que la ruta personalizada esté incluida ... (para obtener un resultado completo, 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 ordenado y claro.
Resolví el problema tan pronto como me di cuenta de que cada vez que probaba Python-2.7.1, en realidad estaba usando el que Pythonbrew instaló.
La moraleja de la historia es leer todos los errores. Descuidé los errores generados al importar sqlite3. El que Pythonbrew instaló no tenía instalado sqlite3. El paquete de desarrollo para sqlite3 se instaló después de que Pythonbrew instaló el Python-2.7.1
Gracias.
Aquí es cómo construir Python y arreglar cualquier dependencia. Supongo que quiere que Python esté completamente separado del lanzamiento de Ubuntu Python, así 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 sitios 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 más importante. Al final, mostrará una lista de los módulos que no se pudieron construir correctamente. A menudo puede solucionar esto instalando un paquete de Ubuntu y volviendo a ejecutar 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 comenzar de esta manera:
a. make clean
b. ./configure --prefix=/home/python27
c. make
Comenzar nunca duele si no estás 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 apropiada.
No dude en probar ./configure --help |less
antes de crear algo porque puede haber opciones interesantes que pueda usar. Una vez en una distribución mínima tuve que hacer --with-dbmliborder = gdbm: bdb para que gdbm funcione. Cuando ejecuta ./configure, las últimas líneas le indicarán dónde puso la información que aprendió. En el caso de Python, Módulos / Configuración ha sido útil para averiguar cómo obtener un módulo para construir.
Otra cosa útil es make clean
y luego ejecutar make >make.out 2>&1
para capturar todo el resultado del proceso completo. Luego, cuando 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 solucionarían al cerrar la sesión, iniciar sesión de nuevo y ejecutar "sudo ldconfig" antes de realizar una reconstrucción completa.