Bagaimana cara menambahkan penyelesaian tab ke shell Python?

125

Saat memulai aplikasi django menggunakan python manage.py shell, saya mendapatkan shell InteractiveConsole - saya dapat menggunakan penyelesaian tab, dll.

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)

Saat baru memulai penerjemah python menggunakan python, itu tidak menawarkan penyelesaian tab.

Dapatkah seseorang memberi tahu saya apa yang dilakukan django untuk memberi saya konsol interaktif, atau apa yang perlu saya lakukan untuk memulai konsol interaktif tanpa aplikasi django?

ashchristopher
sumber
1
Saat Anda mengetik python, Anda mendapatkan prompt >>>, bukan? Itulah shell interaktif. Apa pertanyaanmu?
S. Lotot
4
Itu tidak menawarkan penyelesaian tab. Itulah masalahnya.
ashchristopher
Harap perbarui pertanyaan Anda untuk menentukan itu.
Daryl Spitzer

Jawaban:

210

Saya mungkin telah menemukan cara untuk melakukannya.

Buat 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")

lalu di file .bashrc Anda, tambahkan

export PYTHONSTARTUP=~/.pythonrc

Sepertinya itu berhasil.

ashchristopher
sumber
2
ini berfungsi untuk Jython di mana IPython dan bpython saat ini tidak tersedia.
Skylar Saveland
1
Untuk beberapa alasan, hal di atas berfungsi untuk saya di mac lama saya dengan "singa gunung" tetapi tidak berfungsi untuk mac baru dengan "el captan". Saya perlu source ~/.bashrcsetiap saat untuk membuatnya bekerja sebelum memulai penerjemah python. Ada tips?
hi15
1
@hmi Cobalah menyatukan Anda .bashrcdan .bash_profileseperti yang disarankan di bagian bawah halaman ini: joshstaiger.org/archives/2005/07/bash_profile_vs.html Ini juga memberikan informasi tentang perbedaan di antara keduanya. Ini mungkin tidak menyelesaikan masalah, tetapi mungkin membantu.
Dangercrow
@hmi Coba masukkan /etc/bashrc, bukan ~/.bashrc.
suara
Hanya untuk referensi - Saya mungkin kembali ke jawaban ini lebih sering daripada yang lain di StackOverflow, jadi terima kasih.
timmins
10

Saya menggunakan ptpython. https://github.com/jonathanslenders/ptpython/

ptpython adalah alat yang luar biasa dari shell cmd pelengkapan otomatis. menginstal ptpython sangat mudah, gunakan alat pip

pip instal ptpython

dan untuk shell django, Anda harus mengimpor django env, seperti ini

impor os

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

Percayalah, ini adalah cara terbaik untuk Anda !!!

alan_wang
sumber
5

perbaiki untuk windows10 shell:

  • pip instal pyreadline
  • pip instal ipython [shell]
Tuan B.
sumber
4

Sepertinya python3 memilikinya di luar kotak!

Michel Samia
sumber
1

Di Python3 fitur ini diaktifkan secara default. Sistem saya belum readlinemenginstal modul . Saya di Manjaro. Saya tidak menghadapi masalah penyelesaian tab ini di distribusi linux lain (dasar, ubuntu, mint).

Setelah pipmenginstal modul, saat mengimpor, itu membuat kesalahan berikut-

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

Untuk mengatasi ini, saya berlari-

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

Ini menyelesaikan kesalahan impor. Dan, itu juga membawa penyelesaian tab di repl python tanpa kreasi / perubahan apa pun dari .pythonrcdan .bashrc.

TrigonaMinima
sumber
0

Iya. Itu dibangun untuk 3.6.

fernanr @ gnuruwi ~ $ python3.6 Python 3.6.3 (default, Apr 10 2019, 14:37:36) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] di linux Ketik "bantuan", "hak cipta "," kredit "atau" lisensi "untuk informasi lebih lanjut.

impor os os. Tampilkan semua 318 kemungkinan? (y atau 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
sumber
-1

Untuk versi yang lebih lama (2.x) skrip di atas berfungsi seperti pesona :)

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
sumber
Balasan Anda tampaknya kehilangan konten "~ / .pythonrc"
MadMike