Ipython: IPython instalado dentro de virtualenv. ADVERTENCIA "Instala IPython dentro de virtualtenv"

Creado en 14 mar. 2013  ·  14Comentarios  ·  Fuente: ipython/ipython

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?

needs-info

Comentario más útil

Es posible que la solución sea tan simple como hash -r , ¿puedes intentarlo?

Todos 14 comentarios

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:

  1. ejecutó ipython y vio esta advertencia
  2. instalaste ipython en el env
  3. en la misma sesión de shell, intentó ejecutar ipython nuevamente

Aquí está la información relevante y por qué hash -r lo arregló:

  • La ruta de los comandos se almacena en caché después de llamarlos, por lo que en realidad no busca en su PATH un comando determinado más de una vez en una sesión de shell.
  • 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!

¿Fue útil esta página
0 / 5 - 0 calificaciones