2015-11-09 19 views
10

Quando creo un virtual-env python3, il completamento della tabulazione (predefinito con python3) non funziona più. Perché?Perché virtualenv disabilita efficacemente il completamento delle schede in Python 3?

virtualenv -p /usr/bin/python3 --system-site-packages ~/venv3.site 
. ~/venv3.site/bin/activate 

Senza --system-site-packages ha lo stesso problema: nessuna scheda di completamento. Se eseguo python3 senza alcun env virtuale, il completamento delle schede funziona.

risposta

9

Citando Carl Meyer su this GitHub comment,

Sì, uno degli aspetti più brutti di attuazione del virtualenv è che deve avere la propria copia del modulo sito, che viene utilizzato per tutti i virtualenvs indipendentemente dalla versione di Python con cui sono creati.

Il problema si trova nel file $VIRTUAL_ENV/lib/python3.4/site.py, che non ha il completamento della scheda di installazione. Non fornisce la funzione enablerlcompleter. Compararlo con il file site.py distribuito con Python 3.

Se si utilizza Python 3.3 o versione successiva, si consiglia di pyvenv anziché virtualenv.

python3 -mvenv ~/venv3.site 

Un'altra cosa che potreste fare è di rotolare il proprio script di avvio Python e si riferiscono ad esso nella variabile PYTHONSTARTUP ambiente. Metti il ​​tab il completamento e altri ritocchi di avvio in là. Vedere la risposta di Mike Covington per un esempio di tale script.

+0

In qualche modo, ho avuto lo stesso problema di virtualenv quando ho usato pyvenv. –

9

Questo è quanto ho ottenuto il mio scheda di completamento di nuovo:

aggiunto quanto segue ~/.pythonrc.py:

try: 
    import readline 
except ImportError: 
    print("Module readline not available.") 
else: 
    import rlcompleter 
    readline.parse_and_bind("tab: complete") 

aggiunto quanto segue ~/.bash_profile:

export PYTHONSTARTUP=$HOME/.pythonrc.py 
+1

Ah, la riga "Aggiunto il seguente a ~/.pythonrc" dovrebbe essere "..... ~/.pythonrc.py". Grazie! –

+1

Conciso e funzionante! Grazie! –

+0

Attendi ... Non riesco a utilizzare le schede all'inizio delle righe, quindi ... –

-1

ho avuto in situazione simile . Potrebbe essere causato da un motivo diverso. Ma voglio solo tenerlo qui in modo che le altre persone non abbiano speso un altro giorno per fare il debugging di questo.

Sto usando Ubuntu 16.04 LTS, Python 3.5.2 con pyvenv, Virtualenv 15.1.0. Ho continuato a ricevere il messaggio "tab & quindi il terminale scompare". In alcuni file batch che ho fatto "fonte", ho avuto "set -e". Apparentemente, quando si "imposta -e" in quella sessione terminale, il completamento automatico terminerà la finestra del terminale. Rimuovere il "set -e" da quei file batch, il problema è stato risolto.

-1

Le soluzioni menzionate in precedenza non hanno funzionato per me (Python 3.6 installato con brew su Mac OS X High Sierra).

Così ho dovuto cambiare un po 'la mia ~/.pythonrc.py di file:

import readline 
import rlcompleter 
readline.parse_and_bind('bind ^I rl_complete') 

E, naturalmente, è ancora necessario questa riga nel ~/.bash_profile:

export PYTHONSTARTUP=$HOME/.pythonrc.py 

Su Ubuntu, invece utilizzare:

import readline 
import rlcompleter 
readline.parse_and_bind("tab: complete") 
+0

Perché il down-vote? – alexpirine

+0

Sto postando l'unica soluzione che ha funzionato per me su Mac OS X, non capisco davvero perché è down-votato, mentre potrebbe aiutare le persone nella stessa situazione in cui ero ... – alexpirine