xonsh - Python als Shellersatz

    Überraschenderweise gibt es auf Habré immer noch keinen Beitrag über einen so interessanten Ersatz der Hülle wie xonsh ( github ). Aus meiner Sicht ist die Syntax aller shell'ov schrecklich und ich sehe keinen Grund, sie im 21. Jahrhundert und Python in ihrem Namen zu behalten Warteschlange, hat eine ausgezeichnete Syntax und eine Reihe weiterer Vorteile, daher sollte meiner Meinung nach die Standard-Automatisierungssprache sein, die Xonsh zu erreichen versucht .


    Ich benutze Xonsh für eine Weile, also denke ich, ich kann Ihnen genug darüber erzählen, um damit anfangen zu können.


    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 sind laut Angaben der Entwickler nicht alle gewünschten Features implementiert, aber nach meinem Gefühl funktioniert alles (wenn Sie mit den unten genannten Unterschieden umgehen).

    Das Hauptmerkmal von xonsh ist, dass „magisch“ erraten wird, was Sie eingegeben haben - ein Python- oder Shell-Befehl, und es funktioniert ziemlich gut.


    Sie können einen Python-Code mit einem Hund in Shell-Befehle einfügen .


    Ich werde mich nicht mit den Möglichkeiten in xonsh beschäftigen, das ist verständlich und in der Dokumentation und in allen möglichen Artikeln klar beschrieben. Aus meiner Sicht reicht es aus, dass Sie die normale Syntax der Zyklen 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-Rechte erforderlich sind. Obwohl ich erst kürzlich zu einem solchen Schema gewechselt bin, habe ich in Systemordner installiert, es in registriert /etc/shellsund die Shell mit dem Befehl geändert chsh, aber auf den ersten Blick funktioniert auch alles mit der neuen Methode und es scheint mir korrekter, ich möchte das System nicht mit Paketen stören, die nicht aus Repositories stammen, aber dann entscheidet jeder für sich.


    Pip setzen wenn noch nicht:


    sudo apt-get install python3-pip

    Wir setzen xonsh (ohne Sudo), ich zitiere einen Befehl, der alle optionalen Abhängigkeiten installiert, um alle Brötchen zu erhalten, die von den Autoren konzipiert wurden. 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]

    Wahrscheinlich verfügen Sie bereits über .profilePfade zum lokalen Ordner mit Binärdateien im PATH $HOME/.local/bin. Sie werden jedoch nur hinzugefügt, wenn sie vorhanden sind. Sie müssen das Terminal neu starten, damit dieser Code ausgeführt wird und die Binärdatei xonsh ausgeführt und angezeigt werden kann.
    Update als Standard:


    pip3 install --user xonsh --upgrade

    venv


    Wir setzen auf venv, wenn wir die entsprechende Funktionalität nutzen wollen (siehe weiter zu vox):


    sudo apt-get install python3-venv

    Alle Arten von Venvs werden für bestimmte Shells geschärft. Xonsh bietet daher einen eigenen Wrapper namens Vox an . Für eine komfortable Verwendung sollten Sie jedoch die Avox- Erweiterung installieren :


    pip3 install --user xontrib-avox

    Installieren Sie pyenv


    Wenn virtuelle Umgebungen mit einer beliebigen Version von Python erforderlich sind, müssen Sie pyenv klonen, bevor Sie die Abhängigkeiten für die Python-Assembly installieren :


    git clone https://github.com/pyenv/pyenv.git ~/.pyenv

    Im Konfigurationsbeispiel sehen Sie außerdem die Einstellung eines Umgebungsvariablenpaares für die Verwendung von pyenv.


    Starten


    Jetzt haben wir alles installiert und es bleibt Xonsh eine 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 nicht .profile.) da xonsh es auch liest) hinzugefügt .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, sind Sie bereits in xonsh In der Python-Konsole können Sie beispielsweise Berechnungen direkt in der Befehlszeile ausführen, beispielsweise herausfinden, wie viel es sein wird 2+2.


    Anpassung


    Bevor Sie beginnen, sollten Sie eine Konfigurationsdatei erstellen .xonshrc:


    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

    Starten Sie die Shell neu, um die neuen Einstellungen anzuwenden.


    Es lohnt sich, auf das menschliche Datenmodell zu achten - Aliase sind ein Wörterbuch, Pfade sind eine Liste, es ist offensichtlich, aber aus irgendeinem Grund ist es nicht immer so.
    Außerdem haben wir in der Konfiguration das Modul importiert, oswas bedeutet, dass es bereits in unserer Shell verfügbar ist, sodass Sie die erforderlichen Module importieren können und eine eigene, komfortable Umgebung erhalten.


    Der Anfang der resultierenden Datei dient eher der Demonstration von Möglichkeiten, und hier erlauben die letzten drei Zeilen die bequeme Verwendung von virtuellen Umgebungen, von denen ein Beispiel weitere verwendet.


    Verwendung von virtuellen Umgebungen


    Erstellen Sie einen Projektordner (avox erwartet, dass alle Projekte vorhanden sind $PROJECT_DIRS):


    mkdir -p projects/test

    Erstellen Sie eine virtuelle Umgebung für dieses Projekt:


    vox new test

    Dank des benutzerdefinierten Add-Ons avoxmüssen Sie nur in den Projektordner gehen, um die virtuelle Umgebung zu aktivieren. Wir source ./bin/activatemüssen keine seltsamen Dinge tun:


    worldmind@x ~ $ cd projects/test/
    (test) worldmind@x ~/projects/test $ pip install see
    ...
    (test) worldmind@x ~/projects/test $ python -c 'import see'

    Beim Beenden 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 kann man mehr menschliche Arbeit mit der Umleitung von Input-Output-Streams sehen , die nie vergessen haben, wie man dies in allen möglichen Bashern macht. Lassen Sie ihn als erster einen Kommentar auf mich werfen.


    Der Vollständigkeit halber möchte ich, dass man in diesen virtuellen Umgebungen eine beliebige Version von Python verwenden könnte, die beispielsweise über pyenv installiert wurde, aber noch nicht zusammengewachsen ist und die Hände selbst nicht erreicht hat.
    UPD: Vor nicht allzu langer Zeit hat uns xonsh gezeigt, wie man eine beliebige Version von Python in virtuellen Umgebungen verwendet.
    Installieren Sie die gewünschte Version von Python (Liste verfügbar pyenv install --list):


    pyenv install 3.7.2

    Erstellen Sie damit eine virtuelle Umgebung:


    mkdir projects/projectwith3.7
    vox new -p $PYENV_ROOT/versions/3.7.2/bin/python projectwith3.7

    Überprüfung:


    (projectwith3.7) worldmind@x ~/projects/projectwith3.7 $ python --version
    Python 3.7.2

    Rechen


    Das einzige, auf das ich gestoßen bin, sind die Unterschiede bei der Flucht :


    find . -name data.txt -exec echo {} \;

    funktioniert nicht, da das Fluchen mit einem Backslash in xonsh nicht funktioniert und Zahnspangen eine besondere Bedeutung haben, müssen Sie Anführungszeichen verwenden:


    find . -name .xonshrc -exec echo '{}' ';'

    Es gibt einige Unterschiede zu bash in Form einer Tabelle in der Dokumentation .


    Fazit


    Es scheint mir, dass Xonsh ein guter Anwärter für eine normale Zukunftsperspektive für alle ist und vor allem Pythonisten ansprechen sollte. Start to use (die Installation ohne Sudo erleichtert das Zurücksetzen, Sie können einfach den Ordner löschen), um zu sehen, ob alles für Sie persönlich vorhanden ist. Vielleicht haben Sie dies gesucht, hatten jedoch Angst vor der Installation.


    Jetzt auch beliebt: