Überraschenderweise gibt es auf dem Hub immer noch keinen Beitrag über einen so sehr interessanten Shell-Ersatz wie xonsh ( github ). Aus meiner Sicht ist die Syntax aller Shells schrecklich und ich sehe keinen Grund, sie im 21. Jahrhundert zu speichern, und Python in meinem Es hat eine ausgezeichnete Syntax und viele andere Vorteile, daher sollte es meiner Meinung nach die Standard-Automatisierungssprache sein, was xonsh erreichen möchte .
Ich benutze xonsh seit einiger Zeit, daher denke ich, dass ich genug darüber sprechen kann, um es zu verwenden.
Reservierungen:
- Bei xonsh geht es nur um Python 3, aber das ist die Norm .
- xonsh wurde noch nicht veröffentlicht (Version 0.8.3 zum Zeitpunkt des Schreibens), anscheinend wurden nach Angaben der Entwickler noch nicht alle gewünschten Funktionen implementiert, aber meiner Meinung nach funktioniert alles (wenn Sie sich die Unterschiede ansehen, über die unten).
Das Hauptmerkmal von xonsh ist, dass es "magisch" errät, was Sie eingegeben haben - ein Python- oder Shell-Befehl, und dies funktioniert recht gut.
Sie können Python-Code mit einem Hund in Shell-Befehle einfügen.
Ich werde nicht näher auf die Funktionen in xonsh eingehen. Dies wird in der Dokumentation und in allen Arten von Artikeln klar und grafisch beschrieben. Aus meiner Sicht reicht es aus, dass Sie die normale Schleifensyntax in der Shell erhalten:
worldmind@x ~ $ for i in range(3): ............... echo $SHELL
Daher werde ich versuchen, mich auf das zu konzentrieren, was nicht oder schlecht beschrieben wird.
Installation
Ich werde die Installation (für Debian / Ubuntu) beschreiben, für die keine Superuser-Berechtigungen erforderlich sind. Obwohl ich erst kürzlich zu einem solchen Schema gewechselt bin, habe ich es zuvor in die Systemordner gestellt, in /etc/shells
und die Shell mit dem chsh
geändert, aber auf den ersten Blick funktioniert alles Auch mit der neuen Methode, und es scheint mir korrekter, möchte ich das System nicht mit Paketen verstopfen, die nicht aus den Repositorys stammen, aber hier entscheidet jeder für sich.
Wir setzen pip wenn nicht schon:
sudo apt-get install python3-pip
Wir setzen xonsh (ohne sudo), ich gebe einen Befehl, der alle optionalen Abhängigkeiten installiert, um alle von den Autoren konzipierten Brötchen zu erhalten. Wenn jemand eine minimale Installation wünscht, können Sie die eckigen Klammern mit dem Inhalt entfernen:
pip3 install --user xonsh[ptk,pygments,proctitle,linux]
Höchstwahrscheinlich haben Sie bereits irgendwo im .profile
in PATH die Pfade zum lokalen Ordner mit den Binärdateien $HOME/.local/bin
hinzugefügt, aber sie werden nur hinzugefügt, wenn sie vorhanden sind. Daher müssen Sie das Terminal neu starten, damit dieser Code funktioniert und die xonsh-Binärdatei musste rennen und sehen.
Update ist Standard:
pip3 install --user xonsh --upgrade
venv
Wir setzen venv, wenn wir die entsprechende Funktionalität nutzen wollen (siehe weiter unten auf vox):
sudo apt-get install python3-venv
Alle Venvs sind für bestimmte Shells geschärft, daher bietet xonsh einen eigenen Wrapper namens vox an . Für eine komfortable Verwendung lohnt es sich jedoch, die avox- Erweiterung zu installieren:
pip3 install --user xontrib-avox
Pyenv-Installation
Wenn virtuelle Umgebungen mit einer beliebigen Version von Python benötigt werden, müssen Sie pyenv klonen, indem Sie zuerst die Abhängigkeiten zum Erstellen der Python installieren :
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
Weiter in der Beispielkonfiguration sehen Sie die Installation eines Paares von Umgebungsvariablen zur Verwendung von pyenv.
Starten
Jetzt haben wir alles installiert und es bleibt übrig, xonsh zu einer Shell zu machen. Um nichts außerhalb des Benutzerordners zu ändern, verwende ich den folgenden Code (basierend auf SO ) für die Bash (wenn Sie eine andere Shell haben, wissen Sie, was zu tun ist, verwenden aber kein .profile da xonsh es auch liest) hinzugefügt zu .bashrc
:
# set default shell without editing /etc/shells if [ "${XONSH_VERSION:-unset}" = "unset" ] ; then export SHELL=$HOME/.local/bin/xonsh exec $HOME/.local/bin/xonsh -l fi
Wir starten die Shell neu und wenn alles gut gegangen ist, befinden Sie sich bereits in xonsh, d. H. Im Wesentlichen in der Python-Konsole, und Sie können beispielsweise Berechnungen direkt über die Befehlszeile ausführen, um beispielsweise herauszufinden, wie viel 2+2
wird.
Anpassung
Bevor Sie es verwenden, sollten Sie eine .xonshrc
Konfigurationsdatei erstellen:
aliases['g'] = 'git' import os local_bin = '{}/.local/bin'.format($HOME) if os.path.isdir(local_bin): $PATH.append(local_bin) $PYENV_ROOT = '%s/.pyenv' % $HOME $PATH.insert(0, '%s/bin' % $PYENV_ROOT) xontrib load vox $PROJECT_DIRS = ["~/projects"] xontrib load avox
Startet die Shell neu, um die neuen Einstellungen zu übernehmen.
Es lohnt sich, auf das menschliche Datenmodell zu achten - Aliase sind ein Wörterbuch, Wege sind eine Liste, es scheint offensichtlich, aber aus irgendeinem Grund ist es nicht immer so.
Außerdem haben wir das os
Modul in die Konfiguration importiert, was bedeutet, dass es bereits in unserer Shell verfügbar ist, sodass Sie die erforderlichen Module importieren und Ihre eigene, komfortable Umgebung erhalten können.
Der Anfang der obigen Datei dient eher der Veranschaulichung der Funktionen. In den letzten drei Zeilen können Sie jedoch bequem virtuelle Umgebungen verwenden, von denen ein Beispiel später verwendet wird.
Virtuelle Umgebungen verwenden
Erstellen Sie einen Projektordner (avox erwartet, dass sich alle Projekte in $PROJECT_DIRS
):
mkdir -p projects/test
Erstellen Sie eine virtuelle Umgebung für dieses Projekt:
vox new test
Dank des konfigurierten avox
Add- avox
müssen wir nur zum Projektordner gehen, um die virtuelle Umgebung zu aktivieren. source ./bin/activate
müssen keine seltsame source ./bin/activate
:
worldmind@x ~ $ cd projects/test/ (test) worldmind@x ~/projects/test $ pip install see ... (test) worldmind@x ~/projects/test $ python -c 'import see'
Beim Verlassen des Ordners wird die virtuelle Umgebung deaktiviert:
(test) worldmind@x ~/projects/test $ cd worldmind@x ~ $ python3 -c 'import see' err>out | fgrep 'NotFound' ModuleNotFoundError: No module named 'see'
Gleichzeitig können Sie mehr menschliche Arbeit mit der Umleitung von E / A-Streams sehen , die nie vergessen haben, wie dies bei allen Arten von Bashs zu tun ist. Lassen Sie sie die Ersten sein, die Kommentare auf mich werfen.
Der Vollständigkeit halber möchte ich, dass es in diesen virtuellen Umgebungen möglich wäre, eine beliebige Version von Python zu verwenden, die beispielsweise über Pyenv installiert wurde, aber bisher nicht zusammengewachsen ist und die Hände nicht zum Aushärten gelangt sind.
UPD: Vor nicht allzu langer Zeit wurde xonsh beigebracht, eine beliebige Version von Python in virtuellen Umgebungen zu verwenden.
Installieren Sie die gewünschte Version von Python (Liste der verfügbaren pyenv install --list
):
pyenv install 3.7.2
Erstellen Sie mit ihr eine virtuelle Umgebung:
mkdir projects/projectwith3.7 vox new -p $PYENV_ROOT/versions/3.7.2/bin/python projectwith3.7
Wir prüfen:
(projectwith3.7) worldmind@x ~/projects/projectwith3.7 $ python --version Python 3.7.2
Rechen
Das einzige, was ich mir ausgedacht habe, sind die Unterschiede bei der Flucht :
find . -name data.txt -exec echo {} \;
funktioniert nicht, da das Escape-Backslash in xonsh nicht funktioniert und geschweifte Klammern eine besondere Bedeutung haben. Sie müssen beispielsweise Anführungszeichen verwenden:
find . -name .xonshrc -exec echo '{}' ';'
Einige Unterschiede zu Bash bestehen in Form einer Tabelle in der Dokumentation .
Fazit
Es scheint mir, dass xonsh ein guter Anwärter auf die normale Hülle der Zukunft für alle ist, und insbesondere sollte es Pythonisten ansprechen. Beginnen Sie mit der Verwendung (Installation ohne sudo erleichtert das Zurücksetzen, Sie können den Ordner einfach löschen), um zu verstehen, ob alles für Sie persönlich da ist. Vielleicht haben Sie danach gesucht, hatten aber Angst, es zu installieren.
Ergänzungen in den Kommentaren
- Festlegen von Umgebungsvariablen für Ordner .
- Aktivierungs-Hooks für die virtuelle Umgebung