you unknown shell_plus django_extensions did python django shell ipython

unknown - ¿Cómo iniciar django shell con ipython en modo qtconsole?



shell_plus django (8)

Desde la versión 1.4 de Django, el uso de django.core.management.setup_environ() está en desuso. Una solución que funciona tanto para la notebook IPython como para la QTconsole es esta (solo ejecútela desde el directorio de su proyecto Django):

In [1]: from django.conf import settings In [2]: from mydjangoproject.settings import DATABASES as MYDATABASES In [3]: settings.configure(DATABASES=MYDATABASES)

Actualización: si trabaja con Django 1.7, también necesita ejecutar lo siguiente:

In [4]: import django; django.setup()

Con django.conf.settings.configure() , especifica la configuración de la base de datos de su proyecto y luego puede acceder a todos sus modelos de la forma habitual.

Si desea automatizar estas importaciones, puede, por ejemplo, crear un perfil de IPython ejecutando:

ipython profile create mydjangoproject

Cada perfil contiene un directorio llamado startup . Puede colocar scripts de Python arbitrarios allí y se ejecutarán justo después de que se inicie IPython. En este ejemplo, lo encuentras debajo de

~/.ipython/profile_<mydjangoproject>/startup/

Simplemente coloque un script allí que contenga el código que se muestra arriba, probablemente incluido en una cláusula try..except para manejar ImportError s. A continuación, puede iniciar IPython con el perfil dado de esta manera:

ipython qtconsole --profile=mydjangoproject

o

ipython notebook --profile=mydjangoproject

Cuando comienzo el shell django escribiendo python manage.py shell ipython shell ipython . ¿Es posible hacer que Django inicie ipython en modo qtconsole ? (es decir, hacer que se ejecute ipython qtconsole )

Arek

edición: así que estoy probando lo que Andrew Wilkinson sugirió en su respuesta: extender mi aplicación django con un comando que se basa en el comando shell original de django. Por lo que entiendo, el código que inicia ipython en la versión original es el siguiente:

from django.core.management.base import NoArgsCommand class Command(NoArgsCommand): requires_model_validation = False def handle_noargs(self, **options): from IPython.frontend.terminal.embed import TerminalInteractiveShell shell = TerminalInteractiveShell() shell.mainloop()

¿Algún consejo sobre cómo cambiar este código para iniciar ipython en modo qtconsole?

segunda edición: lo que encontré y funcionó hasta ahora es - inicia ''ipython qtconsole'' desde la ubicación donde está settings.py de mi proyecto (o configura sys.path si comienza desde una ubicación diferente), y luego ejecuta esto:

import settings import django.core.management django.core.management.setup_environ(settings)

y ahora puedo importar mis modelos, listar todas las instancias, etc.


He creado un script de shell con lo siguiente:

/path/to/ipython qtconsole --pylab inline -c "run /path/to/my/site/shell.py"

Solo necesita la parte en --pylab inline si desea los gráficos de matplotlib en línea geniales.

Y creé un script de python shell.py en /path/to/my/site con:

import os working_dir = os.path.dirname(__file__) os.chdir(working_dir) import settings import django.core.management django.core.management.setup_environ(settings)

Al ejecutar mi script de shell, obtengo un ipython qtconsole con los beneficios del shell django.


Los documentos here dicen:

Si prefieres no usar manage.py, no hay problema. Simplemente configure la variable de entorno DJANGO_SETTINGS_MODULE en mysite.settings y ejecute python desde el mismo directorio en el que administra.py (o asegúrese de que ese directorio esté en la ruta de Python, para que funcione la importación de mysite).

Por lo tanto, debería ser suficiente para establecer esa variable de entorno y luego ejecutar ipython qtconsole . Podría hacer un script simple para hacer esto por usted automáticamente.


Puede crear un comando que amplíe el comando de shell base e importe la aplicación IPythonQtConsoleApp así:

cree el archivo qtshell.py en su aplicación / administración / comandos con:

from django.core.management.commands import shell class Command(shell.Command): def _ipython(self): """Start IPython Qt console""" from IPython.qt.console.qtconsoleapp import IPythonQtConsoleApp app = IPythonQtConsoleApp.instance() app.initialize(argv=[]) app.start()

entonces solo usa python manage.py qtshell


Puedes consultar el código que ejecuta el shell here . Verás que no hay dónde configurar qué shell se ejecuta.

Lo que podría hacer es copiar este archivo, renombrarlo como shell_qt.py y colocarlo en el directorio de administración / comandos de su propio proyecto. manage.py shell_qt para ejecutar la consola QT y luego puede ejecutar manage.py shell_qt .


Puedes instalar extensiones django y luego ejecutar

python manage.py shell_plus --ipython


También quería abrir el shell de Django en qtconsole. Mirando dentro de manage.py, solucione el problema por mí: Inicie IPython qtconsole, cd al directorio base del proyecto y ejecute:

import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")

No olvide cambiar ''myproject'' al nombre de su proyecto.


Una característica un tanto no documentada de shell_plus es la capacidad de ejecutarlo en "modo de solo kernel". Esto nos permite conectarnos desde otro shell, como un qtconsole en ejecución.

Por ejemplo, en un shell haz:

django-admin shell_plus --kernel # or == ./manage.py shell_plus --kernel

Esto imprimirá algo como:

# Shell Plus imports ... ... To connect another client to this kernel, use: --existing kernel-23600.json

Luego, en otra ejecución de shell:

ipython qtconsole --existing kernel-23600.json

Esto ahora debería abrir un QtConsole. Otra sugerencia, en lugar de ejecutar otro shell, también puede presionar Ctrl + Z y ejecutar bg para decirle al proceso actual que se ejecute en segundo plano.