2015-11-09 11 views
10

Wenn ich ein Python3 virtual-env erstelle, funktioniert tab-completion (Standard mit python3) nicht mehr. Warum das?Warum deaktiviert virtualenv Python 3 tab-completion effektiv?

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

Ohne --system-site-packages hat es das gleiche Problem: keine Tab-Vervollständigung. Wenn ich python3 ohne virtual-env aktiviert, funktioniert tab-completion.

Antwort

9

Zitiert Carl Meyer auf this GitHub comment,

Ja, einer der hässlichen Aspekte der Umsetzung des virtualenv ist, dass es seine eigene Kopie des Aufstellungsort Modul aufweisen muss, die für alle virtualenvs verwendet wird, unabhängig davon, welche Version von Python, mit denen sie erstellt wurden.

Das Problem liegt in der Datei $VIRTUAL_ENV/lib/python3.4/site.py, die keine Tabulatorvervollständigung einrichtet. Es bietet nicht die enablerlcompleter Funktion. Vergleichen Sie es mit der site.py Datei verteilt mit Python 3.

Wenn Sie Python 3.3 oder neuer verwenden, empfehle ich pyvenv anstelle von virtualenv.

python3 -mvenv ~/venv3.site 

Eine andere Sache, die Sie tun können, ist Ihre eigene Python-Startskript rollen und es in der PYTHONSTARTUP Umgebungsvariablen beziehen. Setzen Sie die Tab-Vervollständigung und andere Startup Tweaks dort ein. Siehe Mike Covingtons Antwort für ein Beispiel für ein solches Skript.

+0

Irgendwie hatte ich das gleiche Problem wie virtualenv, wenn ich Pyvenv verwendet. –

9

Dies ist, wie ich meine Tab-Vervollständigung bekam zurück:

hinzugefügt folgenden ~/.pythonrc.py:

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

hinzugefügt folgenden ~/.bash_profile:

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

Ah, die Zeile "Hinzugefügt zu ~/.pythonrc" sollte "..... ~/.pythonrc.py" sein. Vielen Dank! –

+1

Prägnant und funktionierend! Vielen Dank! –

+0

Warten ... Ich kann keine Tabs am Zeilenanfang verwenden, dann ... –

-1

ich in ähnliche Situation geraten . Es könnte einen anderen Grund haben. Aber ich möchte es einfach hier behalten, damit andere Leute nicht einen weiteren Tag damit verbringen würden, das zu debuggen.

Ich benutze Ubuntu 16.04 LTS, Python 3.5.2 mit Pyvenv, Virtualenv 15.1.0. Ich bekam immer "Tab & dann Terminal verschwinden" Problem. In einigen Batch-Dateien, die ich "Quelle" hatte, hatte ich "set -e". Wenn Sie in dieser Terminalsitzung "-e" setzen, wird das Terminal automatisch durch die Autocomplete beendet. Entfernen Sie den "set -e" aus diesen Batch-Dateien, das Problem wurde behoben.

-1

Die zuvor erwähnten Lösungen funktionierten nicht für mich (Python 3.6 installiert mit brew on Mac OS X High Sierra).

Also musste ich etwas meine ~/.pythonrc.py Datei ändern:

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

Und natürlich müssen Sie noch diese Zeile in Ihrer ~/.bash_profile:

export PYTHONSTARTUP=$HOME/.pythonrc.py 

auf Ubuntu, sondern verwenden:

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

Warum die Abstimmung runter? – alexpirine

+0

Ich poste die einzige Lösung, die tatsächlich für mich auf Mac OS X funktionierte, ich verstehe nicht wirklich, warum sie abgelehnt wird, während sie Leuten in derselben Situation helfen könnte wie ich ... – alexpirine

Verwandte Themen