Come aggiungo il completamento tramite tabulazione alla shell Python?


125

Quando si avvia un'applicazione django utilizzando python manage.py shell, ottengo una shell InteractiveConsole: posso utilizzare il completamento tramite tabulazione, ecc.

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)

Quando si avvia solo un interprete Python usando python, non offre il completamento con tabulazioni.

Qualcuno può dirmi cosa sta facendo django per fornirmi una console interattiva o cosa devo fare per avviare una console interattiva senza un'app django?


1
Quando digiti python, ottieni un prompt >>>, giusto? Questa è la shell interattiva. Qual'è la tua domanda?
S.Lott

4
Non offre il completamento tramite tabulazione. Quello è il problema.
ashchristopher il

Aggiorna la tua domanda per specificarlo.
Daryl Spitzer,

Risposte:


210

Potrei aver trovato un modo per farlo.

Crea un file .pythonrc

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

quindi nel tuo file .bashrc, aggiungi

export PYTHONSTARTUP=~/.pythonrc

Sembra funzionare.


2
questo funziona per Jython dove IPython e bpython non sono attualmente disponibili.
Skylar Saveland

1
Per qualche ragione, quanto sopra ha funzionato per me nel mio vecchio mac con "mountain lion" ma non funzionava per il nuovo mac con "el captan". Ho bisogno source ~/.bashrcogni volta di farlo funzionare prima di avviare l'interprete Python. Qualche consiglio?
ciao15

1
@hmi Prova a unificare il tuo .bashrce .bash_profilecome suggerito in fondo a questa pagina: joshstaiger.org/archives/2005/07/bash_profile_vs.html Fornisce anche informazioni sulla differenza tra loro. Potrebbe non risolvere il problema, ma potrebbe essere d'aiuto.
Dangercrow

@hmi Prova a inserirlo /etc/bashrc, invece di ~/.bashrc.
voci

Solo per riferimento: probabilmente sono tornato a questa risposta più volte di qualsiasi altra su StackOverflow, quindi grazie.
timmins



10

Uso ptpython. https://github.com/jonathanslenders/ptpython/

ptpython è uno strumento meraviglioso per il completamento automatico della shell cmd. installare ptpython è molto semplice, usa lo strumento pip

pip installa ptpython

e per django shell, dovresti importare django env, in questo modo

import os

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

Credimi, questo è il modo migliore per te !!!


5

correzione per la shell di Windows10:

  • pip installa pyreadline
  • pip installa ipython [shell]


1

In Python3 questa funzionalità è abilitata per impostazione predefinita. Il mio sistema non aveva il modulo readlineinstallato. Sono su Manjaro. Non ho affrontato questo problema di completamento con tabulazione su altre distribuzioni Linux (elementary, ubuntu, mint).

Dopo aver pipinstallato il modulo, durante l'importazione, veniva visualizzato il seguente errore:

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

Per risolvere questo problema, ho corso-

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

Ciò ha risolto l'errore di importazione. Inoltre, ha anche portato il completamento della scheda in Python repl senza alcuna creazione / modifica di .pythonrce .bashrc.


0

Sì. È integrato in 3.6.

fernanr @ gnuruwi ~ $ python3.6 Python 3.6.3 (predefinito, 10 aprile 2019, 14:37:36) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] su linux Digita "help", "copyright "," crediti "o" licenza "per ulteriori informazioni.

import os os. Visualizzare tutte le 318 possibilità? (y o n) 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 .st


-1

Per le versioni precedenti (2.x) lo script sopra funziona come un fascino :)

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                 

Nella tua risposta sembra mancare il contenuto di "~ / .pythonrc"
MadMike
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.