Comment ajouter la complétion des onglets au shell Python?

125

Au démarrage d'une application django en utilisant python manage.py shell, j'obtiens un shell InteractiveConsole - je peux utiliser la complétion par tabulation, 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)

Lorsque vous démarrez simplement un interpréteur python à l'aide de python, il n'offre pas de complétion par tabulation.

Quelqu'un peut-il me dire ce que fait django pour me donner une console interactive, ou ce que je dois faire pour démarrer une console interactive sans application django?

ashchristopher
la source
1
Lorsque vous tapez python, vous obtenez une invite >>>, non? C'est le shell interactif. Quelle est votre question?
S.Lott
4
Il n'offre pas la complétion des onglets. C'est le problème.
ashchristopher
Veuillez mettre à jour votre question pour le préciser.
Daryl Spitzer

Réponses:

210

J'ai peut-être trouvé un moyen de le faire.

Créez un fichier .pythonrc

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

puis dans votre fichier .bashrc, ajoutez

export PYTHONSTARTUP=~/.pythonrc

Cela semble fonctionner.

ashchristopher
la source
2
cela fonctionne pour Jython où IPython et bpython ne sont actuellement pas disponibles.
Skylar Saveland
1
Pour une raison quelconque, ce qui précède a fonctionné pour moi dans mon ancien mac avec "mountain lion", mais pas pour un nouveau mac avec "el captan". Je dois à source ~/.bashrcchaque fois que cela fonctionne avant de démarrer l'interpréteur python. Des conseils?
salut15
1
@hmi Essayez d'unifier vos .bashrcet .bash_profilecomme suggéré au bas de cette page: joshstaiger.org/archives/2005/07/bash_profile_vs.html Il fournit également des informations sur la différence entre eux. Cela ne résoudra peut-être pas le problème, mais cela pourrait aider.
Dangercrow
@hmi Essayez de le mettre /etc/bashrc, au lieu de ~/.bashrc.
voix
Juste pour référence - je suis probablement revenu à cette réponse plus de fois que tout autre sur StackOverflow, alors merci.
timmins
10

J'utilise ptpython. https://github.com/jonathanslenders/ptpython/

ptpython est un merveilleux outil de saisie semi-automatique du shell cmd. installer ptpython est très simple, utilisez l'outil pip

pip installer ptpython

et pour le shell django, vous devez importer l'environnement django, comme ceci

importer le système d'exploitation

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

Croyez-moi, c'est le meilleur moyen pour vous !!!

alan_wang
la source
5

correction pour le shell windows10:

  • pip installer pyreadline
  • pip installer ipython [shell]
Monsieur B
la source
4

Il semble que python3 l'ait prêt à l'emploi!

Michel Samia
la source
1

Dans Python3, cette fonctionnalité est activée par défaut. Mon système n'avait pas le modulereadline installé. Je suis sur Manjaro. Je n'ai pas rencontré ce problème de complétion d'onglet sur les autres distributions Linux (élémentaire, ubuntu, mint).

Après avoir pipinstallé le module, lors de l'importation, l'erreur suivante a été générée:

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

Pour résoudre ça, j'ai couru-

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

Cela a résolu l'erreur d'importation. Et, il a également apporté l'achèvement de l'onglet dans le repl python sans aucune création / modification de .pythonrcet .bashrc.

TrigonaMinima
la source
0

Oui. Il est intégré à la version 3.6.

fernanr @ gnuruwi ~ $ python3.6 Python 3.6.3 (par défaut, 10 avril 2019, 14:37:36) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] sous linux Tapez "help", "copyright "," crédits "ou" licence "pour plus d'informations.

importer os os. Afficher les 318 possibilités? (o ou 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.readv (os.readv .st

Ruwinda Fernando
la source
-1

Pour les anciennes versions (2.x) ci-dessus, le script fonctionne comme du charme :)

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
la source
Votre réponse semble manquer le contenu de "~ / .pythonrc"
MadMike