Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multiple incompatible subclass instances of InteractiveShellEmbed are being created

If I install the Anaconda Python Distribution and try to run ipython manage.py shell from within my django app, the error below is thrown. I know that when I install anaconda, it comes packaged with python and ipython whose version differs from the other python/ipython versions I have. But irrespective of the ipython version, why should the django shell throw an error? I tried uninstalling the system ipython and the same error gets thrown, which implies that there is some issue with the anaconda ipython distribution and django. Uninstalling anaconda solves the problem.

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.
like image 874
Pratik Mandrekar Avatar asked Nov 27 '13 13:11

Pratik Mandrekar


1 Answers

You want to use

python manage.py shell

not

ipython manage.py shell

manage.py shell starts an embedded IPython instance. When you run this via ipython manage.py, you are starting a regular IPython session, in which you run a script that tries to embed IPython. That means you are starting two instances of IPython. This fails because IPython cannot be embedded in itself.

like image 86
minrk Avatar answered Oct 31 '22 20:10

minrk