Instalé la última versión estable de IPython dentro de un virtualenv creado con la última versión estable de virtualenv en el último Python 2.7 y todavía recibí una advertencia que decía que debería instalar IPython dentro de virtualenv.
En caso de dudas, creé un virtualenv y lo activé con source [virtenv]/bin/activate
, luego instalé ipython con pip install ipython
. Para asegurarme de que estaba ejecutando el ipython correcto, hice which ipython
que apunta correctamente al binario ipython
dentro del entorno virtual. Sin embargo, cuando llamo ipython
, obtengo WARNING message
:
WARNING: Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv
.
¿Por qué recibo la advertencia?
Intente imprimir estos desde dentro de IPython:
import os, sys, IPython
print os.environ['VIRTUAL_ENV']
print sys.executable
print IPython.__file__
print sys.path
Gracias @minrk. A continuación se muestran las salidas:
Antes de llamar a IPython desde la línea de comandos, mi indicador se muestra correctamente como:
([name of virtual env]) [my regular prompt]
Luego, una vez que estoy en IPython:
print os.environ['VIRTUAL_ENV']
# correctly prints the path to the environment
print sys.executable
# Prints the external path to Python (?)
print IPython.__file__
# Prints the external path to the ipython installation's __init__.pyc (?)
print sys.path
# Prints the path to the site-packages folder from the virtualenv at the top.
# Then the bin path of the Python's external installation (?)
# Then some paths to individual packages from the external installation (?)
# Then the paths to individual packages from the virtualenv (and it misses the virtualenv's installation of IPython, ?)
# Then a few more paths to individual packages of the external installation (?)
# Finally the IPython from the external installation (?)
Si salgo de mi sesión de IPython, mi aviso se muestra correctamente como:
([name of virtual env]) [my regular prompt]
Para aclarar, cuando digo instalación externa _, me refiero a una instalación _no * dentro del virtualenv, y que tampoco es parte de una instalación del sistema, sino una que he incluido en la parte superior de $PATH
y de $LD_LIBRARY_PATH
y que sé que funciona correctamente.
Quizás hay una variable de entorno que me falta y que está confundiendo a IPython al creer que estoy usando la instalación del sistema y no la instalación externa que quiero usar en combinación con mi virtualenv y que incluyo al principio de PATH
y LD_LIBRARY_PATH
?
¿Qué obtienes con head $(which ipython)
?
uno más: sys.argv
Si sys.executable es incorrecto, entonces las cosas salieron mal antes de que se cargaran los paquetes de Python. Esto es precisamente lo que sucedería si el sistema ipython
estuviera instalado en el env en lugar de uno (por ejemplo, si hiciera /usr/bin/ipython
con el env activo, que todos deberíamos esperar que se comporte mal).
Es posible que la solución sea tan simple como hash -r
, ¿puedes intentarlo?
Gracias @minrk. head $(which ipython)
devuelve:
#!/path_to_my_virtual_env/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'ipython==0.13.1','console_scripts','ipython'
__requires__ = 'ipython==0.13.1'
import sys
from pkg_resources import load_entry_point
sys.exit(
load_entry_point('ipython==0.13.1', 'console_scripts', 'ipython')()
)
Y print sys.argv
devuelve la ruta a la instalación externa de Python.
¡Ejecutar hash -r
desde la terminal parece haber funcionado!
Sin embargo, ahora recibo una advertencia diferente.
WARNING: IPython History requires SQLite, your history will not be saved
lo cual es interesante, ya que no recibo este mensaje si desactivo mi virtualenv y ejecuto ipython desde la instalación externa.
Supongo que esto es lo que hiciste:
ipython
y vio esta advertenciaAquí está la información relevante y por qué hash -r
lo arregló:
which
no es consciente de este caché, por lo que which ipython
no apunta necesariamente al ipython
que se llamará si se ha llamado antes en la sesión de shell.hash -r
simplemente restablece este caché, por lo que which
volverá a ser preciso.En cuanto a sqlite, ¿qué Python usaste para virtualenv?
@minrk ¡ Sí, eso es correcto! Gracias. Estoy usando Python 2.7 x64
¿Construiste Python tú mismo? Si es así, debe asegurarse de que libsqlite esté presente y disponible cuando compile Python.
Gracias @minrk. libsqlite
parece estar disponible para el IPython externo, es decir, el que ejecuto cuando no activo el entorno virtual (aunque este no es el de la instalación del sistema, ya que he modificado PATH
y LD_LIBRARY_PATH
para incluir una instalación externa en la parte superior). Dicho esto, supongo que es posible que el IPython externo esté usando libsqlite
de la instalación del sistema (probablemente de otras rutas en LD_LIBRARY_PATH
). ¿Sería eso posible?
De cualquier manera, gracias de nuevo por toda su ayuda. El problema original que informé está resuelto, por lo que podemos cerrar el ticket de manera segura.
generalmente es un problema de tiempo de compilación: creo que necesita los encabezados, etc. (no puede solucionarlo sin volver a compilar Python)
Configuré el software ejecutivo de perfil .py en Notebook, ¡así que nunca se ejecutó!
Entonces, ¡lo encuentro!
¡Gracias!
Comentario más útil
Es posible que la solución sea tan simple como
hash -r
, ¿puedes intentarlo?