summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/core/management/commands/shell.py40
1 files changed, 26 insertions, 14 deletions
diff --git a/django/core/management/commands/shell.py b/django/core/management/commands/shell.py
index 851d4e3cfb..00a6602c0b 100644
--- a/django/core/management/commands/shell.py
+++ b/django/core/management/commands/shell.py
@@ -19,23 +19,35 @@ class Command(NoArgsCommand):
help = "Runs a Python interactive interpreter. Tries to use IPython or bpython, if one of them is available."
requires_model_validation = False
+ def _ipython_pre_011(self):
+ """Start IPython pre-0.11"""
+ from IPython.Shell import IPShell
+ shell = IPShell(argv=[])
+ shell.mainloop()
+
+ def _ipython_pre_100(self):
+ """Start IPython pre-1.0.0"""
+ from IPython.frontend.terminal.ipapp import TerminalIPythonApp
+ app = TerminalIPythonApp.instance()
+ app.initialize(argv=[])
+ app.start()
+
+ def _ipython(self):
+ """Start IPython >= 1.0"""
+ from IPython import start_ipython
+ start_ipython(argv=[])
+
def ipython(self):
- try:
- from IPython.frontend.terminal.ipapp import TerminalIPythonApp
- app = TerminalIPythonApp.instance()
- app.initialize(argv=[])
- app.start()
- except ImportError:
- # IPython < 0.11
- # Explicitly pass an empty list as arguments, because otherwise
- # IPython would use sys.argv from this script.
+ """Start any version of IPython"""
+ for ip in (self._ipython, self._ipython_pre_100, self._ipython_pre_011):
try:
- from IPython.Shell import IPShell
- shell = IPShell(argv=[])
- shell.mainloop()
+ ip()
except ImportError:
- # IPython not found at all, raise ImportError
- raise
+ pass
+ else:
+ return
+ # no IPython, raise ImportError
+ raise ImportError("No IPython")
def bpython(self):
import bpython