Wie füge ich der Python-Shell die Tab-Vervollständigung hinzu?

125

Wenn python manage.py shellich eine Django-Anwendung mit starte , erhalte ich eine InteractiveConsole-Shell - ich kann die Tab-Vervollständigung usw. verwenden.

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)

Wenn Sie einen Python-Interpreter nur mit starten python, bietet er keine Tab-Vervollständigung.

Kann mir jemand sagen, was Django tut, um mir eine interaktive Konsole zu geben, oder was ich tun muss, um eine interaktive Konsole ohne Django-App zu starten?

Ashchristopher
quelle
1
Wenn Sie Python eingeben, erhalten Sie eine >>> Eingabeaufforderung, oder? Das ist die interaktive Shell. Was ist deine Frage?
S.Lott
4
Es bietet keine Tab-Vervollständigung. Das ist das Problem.
Ashchristopher
Bitte aktualisieren Sie Ihre Frage, um dies anzugeben.
Daryl Spitzer

Antworten:

210

Ich habe vielleicht einen Weg gefunden, es zu tun.

Erstellen Sie eine Datei .pythonrc

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

Fügen Sie dann in Ihrer .bashrc-Datei hinzu

export PYTHONSTARTUP=~/.pythonrc

Das scheint zu funktionieren.

Ashchristopher
quelle
2
Dies funktioniert für Jython, wo IPython und Bpython derzeit nicht verfügbar sind.
Skylar Saveland
1
Aus irgendeinem Grund funktionierte das oben Genannte für mich in meinem alten Mac mit "Berglöwe", aber nicht für einen neuen Mac mit "El Captan". Ich muss source ~/.bashrcjedes Mal, damit es funktioniert, bevor ich Python Interpreter starte. Irgendwelche Tipps?
Hi15
1
@hmi Versuchen Sie, Ihr .bashrcund .bash_profilewie am Ende dieser Seite vorgeschlagen zu vereinheitlichen : joshstaiger.org/archives/2005/07/bash_profile_vs.html Es enthält auch Informationen zum Unterschied zwischen ihnen. Es könnte das Problem nicht lösen, aber es könnte helfen.
Dangercrow
@hmi Versuchen Sie es /etc/bashrcstatt ~/.bashrc.
Stimmen
Nur als Referenz - ich bin wahrscheinlich öfter als jede andere Antwort auf StackOverflow auf diese Antwort zurückgekommen, also danke.
Timmins
10

Ich benutze Ptpython. https://github.com/jonathanslenders/ptpython/

ptpython ist ein wunderbares Tool zur automatischen Vervollständigung der Shell cmd. Die Installation von ptpython ist sehr einfach. Verwenden Sie das Pip-Tool

pip install ptpython

und für die Django-Shell sollten Sie die Django-Umgebung wie folgt importieren

os importieren

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

Vertrau mir, das ist der beste Weg zu dir !!!

alan_wang
quelle
5

Fix für Windows 10 Shell:

  • pip install pyreadline
  • pip install ipython [shell]
Mr.B.
quelle
4

Es sieht so aus, als ob Python3 es sofort einsatzbereit hat!

Michel Samia
quelle
1

In Python3 ist diese Funktion standardmäßig aktiviert. Auf meinem System war das Modul nicht readlineinstalliert. Ich bin auf Manjaro. Ich habe dieses Problem mit der Tab-Vervollständigung bei anderen Linux-Distributionen (Elementary, Ubuntu, Mint) nicht festgestellt.

Nach der pipInstallation des Moduls wurde beim Importieren der folgende Fehler ausgegeben:

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

Um dies zu lösen, lief ich

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

Dadurch wurde der Importfehler behoben. Und es brachte auch die Tab-Vervollständigung in der Python-Repl ohne jede Erstellung / Änderung von .pythonrcund .bashrc.

TrigonaMinima
quelle
0

Ja. Es ist in 3.6 eingebaut.

fernanr @ gnuruwi ~ $ python3.6 Python 3.6.3 (Standard, 10. April 2019, 14:37:36) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] unter Linux Geben Sie "help", "copyright" ein "," Credits "oder" Lizenz "für weitere Informationen.

Import os os. Alle 318 Möglichkeiten anzeigen? (y oder 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) .st

Ruwinda Fernando
quelle
-1

Für ältere Versionen (2.x) funktioniert das obige Skript wie ein Zauber :)

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                 
Ruwinda Fernando
quelle
Ihrer Antwort scheint der Inhalt von "~ / .pythonrc"
MadMike