¿Por qué no puedo acceder a las funciones importadas en el shell de Django con ipython?

He instalado ipython en mi virtualenv, por lo que python manage.py shell le da a mi ipython. Sin embargo, no puedo acceder a las importaciones desde dentro de las definiciones de funciones:

 $ python manage.py shell Python 2.7.5 (default, Sep 6 2013, 09:55:21) Type "copyright", "credits" or "license" for more information. IPython 1.1.0 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object', use 'object??' for extra details. In [1]: from re import search In [2]: def my_search(pattern, string): return search(pattern, string) ...: In [3]: my_search('x', 'y') --------------------------------------------------------------------------- NameError Traceback (most recent call last) /home/wilfred/.envs/drawbridge/lib/python2.7/site-packages/django/core/management/commands/shell.pyc in () ----> 1 my_search('x', 'y') /home/wilfred/.envs/drawbridge/lib/python2.7/site-packages/django/core/management/commands/shell.pyc in my_search(pattern, string) 1 def my_search(pattern, string): ----> 2 return search(pattern, string) 3 NameError: global name 'search' is not defined 

Esto funciona bien si inicio ipython directamente. ¿Por qué no funciona desde el shell de Django?

Este es un error conocido que se corrigió en Django 1.6. También hay algunas soluciones alternativas para versiones anteriores sugeridas en la discusión del tema, eche un vistazo.

Ver también:

  • Ámbito de las variables en shell django en línea, shell de python vs
  • Obteniendo NameError con Django 1.5 e IPython