¿Cómo agrego la finalización de tabulación al shell de Python?

125

Al iniciar una aplicación django usando python manage.py shell, obtengo un shell InteractiveConsole: puedo usar la finalización de tabulación, etc.

Python 2.5.1 (r251:54863, Apr 15 2008, 22:57:26) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)

Cuando recién se inicia un intérprete de Python python, no ofrece finalización de tabulación.

¿Alguien puede decirme qué está haciendo django para darme una consola interactiva, o qué debo hacer para iniciar una consola interactiva sin una aplicación de django?

Ashchristopher
fuente
1
Cuando escribes python, obtienes un >>> indicador, ¿verdad? Ese es el caparazón interactivo. ¿Cuál es tu pregunta?
S.Lott
4
No ofrece finalización de pestañas. Ese es el problema.
ashchristopher
Actualice su pregunta para especificarlo.
Daryl Spitzer

Respuestas:

210

Puede que haya encontrado una manera de hacerlo.

Crea un archivo .pythonrc

# ~/.pythonrc
# enable syntax completion
try:
    import readline
except ImportError:
    print("Module readline not available.")
else:
    import rlcompleter
    readline.parse_and_bind("tab: complete")

luego en su archivo .bashrc, agregue

export PYTHONSTARTUP=~/.pythonrc

Eso parece funcionar.

Ashchristopher
fuente
2
esto funciona para Jython donde IPython y bpython no están disponibles actualmente.
Skylar Saveland
1
Por alguna razón, lo anterior funcionó para mí en mi antiguo mac con "mountain lion" pero no funcionó para el nuevo mac con "el captan". Necesito hacerlo source ~/.bashrccada vez que funcione antes de iniciar el intérprete de Python. ¿Algun consejo?
hola15
1
@hmi Intente unificar su .bashrcy .bash_profilecomo se sugiere al final de esta página: joshstaiger.org/archives/2005/07/bash_profile_vs.html También proporciona información sobre la diferencia entre ellos. Puede que no resuelva el problema, pero podría ayudar.
Dangercrow
@hmi Intenta ponerlo, en /etc/bashrclugar de ~/.bashrc.
voces
Solo como referencia: probablemente he vuelto a esta respuesta más veces que cualquier otra en StackOverflow, así que gracias.
timmins
10

Yo uso ptpython. https://github.com/jonathanslenders/ptpython/

ptpython es una herramienta maravillosa para autocompletar shell cmd. instalar ptpython es muy fácil, use la herramienta pip

pip instalar ptpython

y para django shell, debe importar el django env, como este

importar sistema operativo

os.environ.setdefault ("DJANGO_SETTINGS_MODULE", "testweb.settings")

Créame, esta es la mejor manera de hacerlo !!!

alan_wang
fuente
5

arreglo para el shell de windows10:

  • pip instalar pyreadline
  • pip instalar ipython [shell]
Señor B
fuente
4

¡Parece que python3 lo tiene listo para usar!

Michel Samia
fuente
1

En Python3, esta función está habilitada de forma predeterminada. Mi sistema no tenía el módulo readlineinstalado. Estoy en Manjaro. No enfrenté este problema de finalización de pestañas en otras distribuciones de Linux (elemental, ubuntu, mint).

Después de pipinstalar el módulo, durante la importación, arrojaba el siguiente error:

ImportError: libncursesw.so.5: cannot open shared object file: No such file or directory

Para resolver esto, corrí

cd /usr/lib ln -s libncursesw.so libncursesw.so.5

Esto resolvió el error de importación. Y también trajo la finalización de la pestaña en la respuesta de Python sin ninguna creación / cambio de .pythonrcy .bashrc.

TrigonaMinima
fuente
0

Si. Está integrado en 3.6.

fernanr @ gnuruwi ~ $ python3.6 Python 3.6.3 (predeterminado, 10 de abril de 2019, 14:37:36) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] en Linux Escriba "ayuda", "derechos de autor "," créditos "o" licencia "para obtener más información.

import os os. ¿Mostrar las 318 posibilidades? (sí o no) os.CLD_CONTINUED os.O_RDONLY os.ST_NOEXEC os.environ os.getpid (os.readlink (os.spawnvpe (os.CLD_DUMPED os.O_RDWR os.ST_NOSUID os.environb os.getppid (os.readv (os. .S t

Fernando Ruwinda
fuente
-1

Para versiones anteriores (2.x), el script anterior funciona a la perfección :)

fernanr@crsatx4 ~ $ cat .bashrc | grep -i python
#Tab completion for python shell
export PYTHONSTARTUP=~/.pythonrc
fernanr@crsatx4 ~ $ . ~/.bashrc
fernanr@crsatx4 ~ $ echo $?
0
fernanr@crsatx4 ~ $ python2
Python 2.7.5 (default, Jun 11 2019, 14:33:56)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.
Display all 249 possibilities? (y or n)
os.EX_CANTCREAT             os.O_WRONLY                 
Fernando Ruwinda
fuente
Parece que a tu respuesta le falta el contenido de "~ / .pythonrc"
MadMike