Verwenden von virtualenvwrapper in Eshell

7

Ich habe festgestellt, dass ich keine virtualenvwrapper-Befehle (wie workon) in einer Eshell verwenden kann, aber sie funktionieren in einer Shell-Umgebung. Gibt es einen Virtualenvwrapper-ähnlichen Modus für Emacs?

Calizarr
quelle
virtualenvwrapper(in melpa) gibt den Befehl venv-workonzum Wechseln der Umgebung, aber auch für alle Emacs-Sitzungen. wikemacs.org/index.php/Python#See_also pyvenv sieht jedoch vollständiger aus.
Ehvince

Antworten:

4

virtualenvwrapper(in melpa) gibt den Befehl venv-workonzum Wechseln der Umgebung, aber auch für alle Emacs-Sitzungen. Es funktioniert mit eshell mit venv-initialize-eshell:

Die Unterstützung für eshell wird durch Aufrufen von venv-initialize-eshell aktiviert. Danach befinden sich alle neuen Eshells, die Sie starten, in der richtigen virtuellen Umgebung und haben Zugriff auf installierte ausführbare Dateien usw. Der Modus bietet auch eine Vielzahl von virtuellen Envwrapper-Befehlen, die identisch mit ihren bash / zsh-Gegenstücken funktionieren (im Folgenden ausführlich beschrieben). Beachten Sie, dass Eshell im Gegensatz zur Funktionsweise interaktiver Shells eine Umgebung mit Emacs teilt. Wenn Sie also eine aktivieren oder deaktivieren, ist auch die andere betroffen. Beachten Sie, dass hierfür die Variable eshell-modify-global-environment auf true gesetzt werden muss. Wenn Sie venv-initialize-eshell ausführen, tritt dies auf. Wenn dies bei Ihnen nicht funktioniert, öffnen Sie ein Problem! Es ist technisch möglich, die beiden zu trennen, aber es erfordert ein wenig Hacken mit den verschiedenen Namespaces, die ich gewonnen habe. '

und beim Ändern der eshell-Eingabeaufforderung:

Anpassung der Eshell-Eingabeaufforderung

Möglicherweise möchten Sie auch, dass der Name Ihrer aktuellen virtuellen Umgebung in der Eingabeaufforderung von eshell angezeigt wird. Sie können dies durch einen ziemlich ähnlichen Mechanismus tun, indem Sie einfach irgendwo venv-current-name in Ihre eshell-prompt-Funktion aufnehmen. Hier ist ein einfaches Beispiel für eine Eingabeaufforderung, die den aktuellen Namen der virtuellen Umgebung gefolgt von einem Dollarzeichen enthält:

(setq eshell-prompt-function (lambda () (concat venv-current-name "$")))

Stellen Sie sicher, dass Sie auch Ihren eshell-prompt-regexp anpassen, wenn Sie dies tun.

Weitere Informationen zum Anpassen der eshell-Eingabeaufforderung im EmacsWiki.

Funktioniert mit (e) Shells, hat eine automatische Aktivierung und wird in der Moduszeile angezeigt.

Es würde mich interessieren, die Unterschiede zwischen ihm und pyvenv zu kennen.

Ehvince
quelle
2

Mit pyvenv können Sie eine virtuelle Umgebung in Emacs verwenden. Beachten Sie jedoch, dass dieses Paket aufgrund einiger Einschränkungen von Emacs Ihre gesamte Emacs-Sitzung auf eine bestimmte virtuelle Umgebung umschaltet. Wenn ich mich richtig erinnere, ist es nicht möglich, nur einen Puffer auf eine virtuelle Umgebung umzuschalten.


quelle
Normalerweise verwende ich meine .dir-Locations.el, um den Pyvenv pro Projekt zu wechseln. pyvenv hat auch eine Tracking-Einstellung, die beim Umschalten der Puffer automatisch umschaltet.
Elarson