Jak dodać uzupełnianie tabulatorów do powłoki Pythona?

125

Podczas uruchamiania aplikacji django za pomocą python manage.py shellotrzymuję powłokę InteractiveConsole - mogę używać uzupełniania tabulatorów itp.

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)

Kiedy uruchamiasz interpreter języka Python przy użyciu python, nie oferuje on uzupełniania tabulatorami.

Czy ktoś może mi powiedzieć, co robi django, aby dać mi interaktywną konsolę, lub co muszę zrobić, aby uruchomić konsolę interaktywną bez aplikacji django?

ashchristopher
źródło
1
Kiedy piszesz w Pythonie, pojawia się znak zachęty >>>, prawda? To jest interaktywna powłoka. Jakie jest Twoje pytanie?
S.Lott
4
Nie oferuje uzupełniania zakładek. To jest problem.
ashchristopher
Zaktualizuj swoje pytanie, aby to określić.
Daryl Spitzer

Odpowiedzi:

210

Może znalazłem sposób, żeby to zrobić.

Utwórz plik .pythonrc

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

następnie w swoim pliku .bashrc dodaj

export PYTHONSTARTUP=~/.pythonrc

To wydaje się działać.

ashchristopher
źródło
2
działa to dla Jythona, gdzie IPython i bpython nie są obecnie dostępne.
Skylar Saveland
1
Z jakiegoś powodu powyższe działało dla mnie na moim starym Macu z "lwem górskim", ale nie działało na nowym Macu z "el captan". Muszę source ~/.bashrcza każdym razem, aby to działało przed uruchomieniem interpretera Pythona. Jakieś wskazówki?
hi15
1
@hmi Spróbuj ujednolicić swój .bashrci .bash_profilezgodnie z sugestią na dole tej strony: joshstaiger.org/archives/2005/07/bash_profile_vs.html Zawiera również informacje o różnicach między nimi. To może nie rozwiązać problemu, ale może pomóc.
Dangercrow
@hmi Spróbuj /etc/bashrczamiast tego wstawić ~/.bashrc.
głosy
Tylko w celach informacyjnych - prawdopodobnie wracałem do tej odpowiedzi więcej razy niż do jakiejkolwiek innej w StackOverflow, więc dziękuję.
timmins
10

Używam ptpython. https://github.com/jonathanslenders/ptpython/

ptpython to wspaniałe narzędzie do autouzupełniania powłoki cmd. instalacja ptpython jest bardzo łatwa, użyj narzędzia pip

pip zainstaluj ptpython

a dla powłoki django, powinieneś zaimportować django env, w ten sposób

import os

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

Zaufaj mi, to najlepsza droga do Ciebie !!!

alan_wang
źródło
5

poprawka dla powłoki windows10:

  • pip zainstaluj pyreadline
  • pip install ipython [powłoka]
Pan B.
źródło
4

Wygląda na to, że python3 ma to po wyjęciu z pudełka!

Michel Samia
źródło
1

W Python3 ta funkcja jest domyślnie włączona. Mój system nie miał readlinezainstalowanego modułu . Jestem na Manjaro. Nie spotkałem się z tym problemem z uzupełnianiem zakładek w innych dystrybucjach Linuksa (elementary, ubuntu, mint).

Po pipzainstalowaniu modułu podczas importu wyrzucał następujący błąd-

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

Aby to rozwiązać, pobiegłem

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

To rozwiązało błąd importu. I przyniosło również uzupełnianie tabulatorów w replice Pythona bez tworzenia / zmian .pythonrci .bashrc.

TrigonaMinima
źródło
0

Tak. Jest wbudowany w 3.6.

fernanr @ gnuruwi ~ $ python3.6 Python 3.6.3 (domyślnie, 10 kwietnia 2019, 14:37:36) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] w systemie Linux Wpisz „help”, „copyright „,„ kredyty ”lub„ licencja ”, aby uzyskać więcej informacji.

import os os. Wyświetlić wszystkie 318 możliwości? (y lub 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

Ruwinda Fernando
źródło
-1

Dla starszych wersji (2.x) powyższy skrypt działa jak urok :)

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
źródło
Wydaje się, że w Twojej odpowiedzi brakuje treści „~ / .pythonrc”
MadMike