2012-04-08 3 views
7

Ich möchte eine eingebettete IPython-Shell mit einem user_ns-Wörterbuch und einer Profilkonfiguration (ipython_config.py und die Startdateien) verwenden. Der Zweck besteht darin, eine Django-Shell mit beim Start importierten Modellen auszuführen. django-Erweiterungen implementiert einen Befehl shell_plus genannt, das dies tut:Ausführen von Profilstartdateien in einem eingebetteten IPython t Instanz

https://github.com/django-extensions/django-extensions/blob/master/django_extensions/management/commands/shell_plus.py

from IPython import embed 
embed(user_ns=imported_objects) 

Das Problem ist, dass diese Dateien laden meine Start nicht. embed() ruft load_default_config() auf, das ich lade ipython_config.py.

Wie führe ich die eingebettete IPython-Instanz dazu, meine Profilstartdateien auszuführen?

+0

Das gleiche passiert mit 'manage.py shell', Startup-Dateien werden nicht ausgeführt. Hoffentlich werden sie das bald beheben. (ps, v 0.13) – Paolo

Antwort

1

verwendete ich die folgende Abhilfe mein eigenes IPython Startup-Skript zu laufen, aber dennoch die Vorteile von shell_plus nehmen:

  1. Erstellen Sie eine Datei shell_plus_startup.py im selben Verzeichnis wie manage.py genannt. Zum Beispiel:

    # File: shell_plus_startup.py 
    # Extra python code to run after shell_plus starts an embedded IPython shell. 
    # Run this file from IPython using '%run shell_plus_startup.py' 
    
    # Common imports 
    from datetime import date 
    
    # Common variables 
    tod = date.today() 
    
  2. Einführung Schale plus (die ein eingebettetes IPython Shell startet).

    python manage.py shell_plus

  3. manuell die Startprozedur.

    In [1]: %run shell_plus_startup.py 
    
  4. Dann können Sie Variablen verwenden Sie definiert haben, Module, die Sie importiert haben, usw.

    In [2]: tod 
    Out[2]: datetime.date(2012, 7, 14) 
    

Auch diese Antwort sehen: scripting ipython through django's shell_plus

0

fand ich einen Weg das funktioniert, wenn Sie django-extensions-shell_plus verwenden. Es ist ein wenig hacky, aber auf diese Weise wird Ihre Startup-Datei vollautomatisch geladen und Sie müssen zu Beginn Ihrer ipython-Session keinen run-Befehl eingeben.

Daher habe ich die Datei shells.py aus dem django_extensions dir bearbeitet, die in meinem Fall in /usr/local/lib/python2.7/dist-packages/django_extensions/management/shells.py befindet. Ich fügte diese Zeilen innerhalb der Funktion import_objects(options, style): hinzu, so dass es den Inhalt der Datei startup.py importiert, die durch den Umgebungsparameter PYTHONSTARTUP definiert wurde.

Jetzt, wenn ich die shell_plus-Shell starte, gebe ich die Umgebungsvariable zu meinem Start-Python-Skript. Meine Bash-Skript, das Shell mit alles an seinem Platz zu starten, sieht wie folgt aus:

#!/bin/bash 
export PYTHONSTARTUP=/home/ifischer/src/myproject/startup.py # tells shell_plus to load this file 
python /home/ifischer/src/myproject/manage.py shell_plus --ipython 

Jetzt habe ich Zugriff auf alle Methoden und Variablen definiert in startup.py von Anfang an der ipython Sitzung.

So können Sie das wiederverwenden und benutzerdefinierte Startup-Dateien für jedes Projekt haben, die verschiedene Aspekte vorladen.

Vielleicht gibt es eine sauberere Möglichkeit, die Zeilen, die ich in die Shells.py eingefügt habe, einzubeziehen.Aber dieser Ansatz funktioniert für mich im Moment gut.

+0

Ich habe die obigen Änderungen in meine Fork von django-extensions geschoben: https://github.com/ifischer/django-extensions – ifischer