2013-11-27 7 views
8

Wenn ich die Anaconda Python Distribution installiere und versuche, ipython manage.py shell aus meiner Django-App auszuführen, wird der folgende Fehler ausgelöst. Ich weiß, dass wenn ich Anaconda installiere, es mit Python und Ipython verpackt ist, deren Version sich von den anderen Python/Ipython-Versionen, die ich habe, unterscheidet. Aber warum sollte die django-Shell unabhängig von der ipython-Version einen Fehler auslösen? Ich habe versucht, das System ipython zu deinstallieren und der gleiche Fehler wird geworfen, was bedeutet, dass es ein Problem mit der anaconda ipython-Distribution und django gibt. Die Deinstallation von Anaconda löst das Problem.Mehrere inkompatible Subklasseninstanzen von InteractiveShellEmbed werden erstellt

Stacktrace

manage.py in <module>() 
     9 
    10 if __name__ == "__main__": 
---> 11  execute_manager(settings) 

lib/python2.7/site-packages/django/core/management/__init__.pyc in execute_manager(settings_mod, argv) 
    457  setup_environ(settings_mod) 
    458  utility = ManagementUtility(argv) 
--> 459  utility.execute() 

lib/python2.7/site-packages/django/core/management/__init__.pyc in execute(self) 
    380    sys.stdout.write(self.main_help_text() + '\n') 
    381   else: 
--> 382    self.fetch_command(subcommand).run_from_argv(self.argv) 
    383 
    384 def setup_environ(settings_mod, original_settings_path=None): 

lib/python2.7/site-packages/django/core/management/base.pyc in run_from_argv(self, argv) 
    194   options, args = parser.parse_args(argv[2:]) 
    195   handle_default_options(options) 
--> 196   self.execute(*args, **options.__dict__) 
    197 
    198  def execute(self, *args, **options): 

lib/python2.7/site-packages/django/core/management/base.pyc in execute(self, *args, **options) 
    230    if self.requires_model_validation: 
    231     self.validate() 
--> 232    output = self.handle(*args, **options) 
    233    if output: 
    234     if self.output_transaction: 

lib/python2.7/site-packages/django/core/management/base.pyc in handle(self, *args, **options) 
    369   if args: 
    370    raise CommandError("Command doesn't accept any arguments") 
--> 371   return self.handle_noargs(**options) 
    372 
    373  def handle_noargs(self, **options): 

lib/python2.7/site-packages/django_extensions/management/commands/shell_plus.pyc in handle_noargs(self, **options) 
    116     try: 
    117      from IPython import embed 
--> 118      embed(user_ns=imported_objects) 
    119     except ImportError: 
    120      # IPython < 0.11 

lib/python2.7/site-packages/IPython/terminal/embed.pyc in embed(**kwargs) 
    298   config.InteractiveShellEmbed = config.TerminalInteractiveShell 
    299   kwargs['config'] = config 
--> 300  shell = InteractiveShellEmbed.instance(**kwargs) 
    301  shell(header=header, stack_depth=2, compile_flags=compile_flags) 

lib/python2.7/site-packages/IPython/config/configurable.pyc in instance(cls, *args, **kwargs) 
    358    raise MultipleInstanceError(
    359     'Multiple incompatible subclass instances of ' 
--> 360     '%s are being created.' % cls.__name__ 
    361   ) 
    362 

MultipleInstanceError: Multiple incompatible subclass instances of InteractiveShellEmbed are being created. 
+1

Ich weiß es nicht genau, aber ich renne Shell als 'python manage.py shell' und es läuft ipython shell. – greg

Antwort

10

Sie

python manage.py shell 

nicht

ipython manage.py shell 

manage.py Shell verwenden möchten beginnt eine eingebettete IPython Instanz. Wenn Sie das über ipython manage.py ausführen, starten Sie eine reguläre IPython-Sitzung, in der Sie ein Skript ausführen, das versucht, IPython einzubetten. Das bedeutet, dass Sie zwei Instanzen von IPython starten. Dies schlägt fehl, da IPython nicht in sich selbst eingebettet werden kann.