[PYTHON] Ich habe ein Paket erstellt, um eine ausführbare Datei aus dem Hy-Quellcode zu erstellen

Hypo Wie der Titel schon sagt, habe ich es so oft gemacht, dass es eine Werbung ist.

Einführung

Ich glaube nicht, dass Sie es überhaupt gewohnt sind, es zu hören, aber Hy ist ein ** Lisp-Dialekt, der auf einer Python-VM läuft **. Wenn Sie beispielsweise Squid Lisp: Hy in Python geschrieben lesen, können Sie die Atmosphäre verstehen. Sie können es als ** Clojure Python-Version ** für JVM verstehen. Oder besser gesagt, ** es sieht aus wie Clojure **, also kannst du die Syntax mit Markdown oder ReST für die verdammt kleine Sprache hervorheben.

Hy selbst kann mit einem dedizierten Interpreter ausgeführt werden, aber der Aufwand für die Syntaxanalyse ist nicht gut. Daher ist es gut, den angehängten Befehl "hyc" zu verwenden, nachdem er in eine ".pyc" -Datei konvertiert wurde (bytekompiliertes Python-Skript). Es ist auch möglich, es mit demselben angehängten Befehl "hy2py" in eine ".py" -Datei zu konvertieren, aber ** normalerweise kann es nicht so betrieben werden, wie es ist **. Daher kann es nur zu Debugging-Zwecken verwendet werden. Dies liegt daran, dass von Hy generierte Python-ASTs häufig Symbolnamen haben, die normalerweise in Python nicht verfügbar sind. (Zum Beispiel beginnt der von gensym generierte Variablenname mit:)

Das Obige ist nicht sehr gut, wenn Sie eine kleine Anwendung schreiben möchten, die Ihre täglichen Aufgaben mit Hy vereinfacht. Es ist eine Geschichte, dass du nur ein Makefile schreiben musst, sobald du "hyc" bist, aber es ist nicht so cool **. Für Pythonista ist es außerdem unangenehm, jeden Tag die .pyc-Datei zu sehen **.

Dann wurde ** Hy-Quellcode in einem ausführbaren Format zusammengestellt ** erstellt, sodass dieser Artikel erstellt wurde. ** Hauptthema **.

Installation

Bitte von PyPI.

$ sudo pip install hypo

Wie benutzt man

$ hypo -o Ausgabename Quelldatei 1 Quelldatei 2..

Es wird so verwendet. Wenn die Option "-o" weggelassen wird, wird die Ausgabe "a" genannt. Der Einstiegspunkt der Anwendung ist übrigens hier die "Quelldatei 1". Beachten Sie, dass nur ".hy" -Dateien zur Eingabe akzeptiert werden. Die Ausgabe lautet zipapp. Es handelt sich um eine Archivdatei. Da sie jedoch zuvor die Ausführungsberechtigung erhalten hat, können Sie sie sich als Ausführungsbinärdatei vorstellen. nicht.

Anwendungsbeispiel

Versuchen Sie beispielsweise, eine Anwendung zu erstellen, die aus den folgenden zwei Dateien besteht.

main.hy


(import [iota [iota]])

(defmain [&rest args]
  (print (iota 10)))

iota.hy


(defn iota [m &optional [n 0] [step 1]]
  (if (>= n m)
    None
    (cons n (iota m (+ n step) step))))

Übrigens sind diese Codes in Python wie folgt.

main.py


from iota import iota

if __name__ == '__main__':
    print(iota(10))

iota.py


def iota(m, n=0, step=1):
    if n >= m:
        return ()
    return (n, ) + iota(m, n + step, step)

Normalerweise wird in Python keine Rekursion verwendet, aber funktionale Sprachen sind rekursiv. Da es sich jedoch nicht um eine ** Schwanzwiederholung ** handelt, werde ich ablehnen, dass es sich um einen Code handelt, der für Lisper nicht gut ist. Übrigens, wenn Sie die Schwanzwiederholung in Hy verwenden, [loop / recur](http: // docs. hylang.org/en/latest/contrib/loop.html) Verwenden Sie das Makro.

Kommen wir also zum Hauptthema zurück. Führen Sie den folgenden Befehl vom Terminal aus. Dieses Mal werden wir es mit dem Namen "Beispiel" erstellen.

$ hypo -o example main.hy iota.hy

Dann wird eine Datei mit dem Namen "Beispiel" im aktuellen Verzeichnis erstellt. Versuchen Sie also, sie auszuführen.

$ ./example
(0L 1L 2L 3L 4L 5L 6L 7L 8L 9L)

Der Inhalt von main.hy wird ausgeführt. Zu diesem Zeitpunkt wird die zu ".pyc" kompilierte Datei in der Ausführungsdatei aufgerufen, sodass sie etwas schneller ist als die Ausführung über den Hy-Interpreter. Darüber hinaus ist es ** Hy Spezifikationen **, dass die numerische Ausgabe nicht gut ist.

Zusammenfassung

Im Vordergrund habe ich die Verwendung von ** Hy-Quellcode wird in einem ausführbaren Format zusammengestellt ** vorgestellt. Es ist nicht für sehr große Anwendungen geeignet, aber ich hoffe, Sie werden es verwenden. Es ist ein Paket, das ich in ein paar Stunden geschrieben habe, um die Zeit an Feiertagen zu verkürzen. Wenn Sie also Fehler oder Anfragen haben, führen Sie bitte Pull-Anfrage [Problem](https: // github.com/koji-kojiro/hylang-hypo/issues) Bitte werfen Sie es. Vielen Dank, dass Sie so weit gelesen haben.

Recommended Posts

Ich habe ein Paket erstellt, um eine ausführbare Datei aus dem Hy-Quellcode zu erstellen
Ich habe ein Tool erstellt, um eine Wortwolke aus Wikipedia zu erstellen
Verwendung der NUITKA-Utilities-Hinweis-Kompilierung zum einfachen Erstellen einer ausführbaren Datei aus einem Python-Skript
Fluss vom Quellcode zum Erstellen des Ausführungsformats
Erstellen Sie eine Deb-Datei aus einem Python-Paket
Erstellen Sie eine Datei, die in der Skriptsprache ausgeführt werden kann
Ich habe ein Tool erstellt, um Hy nativ zu kompilieren
Ich habe ein Tool zum Generieren von Markdown aus der exportierten Scrapbox-JSON-Datei erstellt
Ich habe einen Code erstellt, um illustration2vec in ein Keras-Modell zu konvertieren
Ich habe Python-Code geschrieben, um ein Tabellen- (Ansichts-) Abhängigkeitsdiagramm (PlantUML) aus SQL zu erstellen
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Ich möchte das Paket aus den Anforderungen.txt mit Poesie installieren
Ich habe Sie dazu gebracht, Befehle über einen WEB-Browser auszuführen
Ich habe ein Tool erstellt, um automatisch ein einfaches ER-Diagramm aus der Anweisung CREATE TABLE zu generieren
So erstellen Sie ein Conda-Paket
So erstellen Sie eine Konfigurationsdatei
Python> Ich habe einen Testcode für meine eigene externe Datei erstellt
Ich möchte eine Parameterliste aus CloudFormation-Code (yaml) erstellen.
Ich habe eine Untertiteldatei (SRT) aus JSON-Daten von AmiVoice erstellt
Ich habe mir eine Möglichkeit ausgedacht, ein 3D-Modell aus Fotos zu erstellen. Teil 01 Erstellen einer Umgebung
Ich habe ein POST-Skript erstellt, um ein Problem in Github zu erstellen und es im Projekt zu registrieren
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Ich habe ein Skript erstellt, um Piktogramme anzuzeigen
So erstellen Sie ein Repository aus Medien
Ich habe ein Tool erstellt, um Jupyter py mit VS Code in ipynb zu konvertieren
Skript zum Erstellen einer Mac-Wörterbuchdatei
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich habe mit Python eine Einstellungsdatei erstellt
Verwenden Sie BeautifulSoup, um einen Link mit einer Zeichenfolge aus einer HTML-Datei zu extrahieren
Ich habe eine Bibliothek zum Betreiben des AWS CloudFormation-Stacks über CUI (Python Fabric) erstellt.
Aggregieren Sie die Anzahl der Schritte pro Tag aus den iPhone-Gesundheitsdaten, um eine CSV-Datei zu erstellen
Ich habe einen Appdo-Befehl erstellt, um Befehle im Kontext der App auszuführen
Ich habe versucht, die Strichzeichnung mit Deep Learning aus dem Bild zu extrahieren
Bearbeiten Sie Excel in Python, um eine Pivot-Tabelle zu erstellen
Ich habe eine Python-Wörterbuchdatei für Neocomplete erstellt
Ich möchte einfach ein Rauschmodell erstellen
Ich habe ein Extenum-Paket erstellt, das die Enumeration erweitert
So erstellen Sie ein Funktionsobjekt aus einer Zeichenfolge
Ich möchte mit Python ein Fenster erstellen
So erstellen Sie eine JSON-Datei in Python
Ich möchte eine Art von Implementierung erstellen, die angeschlossen werden kann
Ich habe ein Tool erstellt, um neue Artikel zu erhalten
Ich möchte C ++ - Code aus Python-Code erstellen!
Ich möchte mit Python in eine Datei schreiben
Erstellen Sie Word Cloud aus akademischen Programmen
Lesen Sie die Python-Markdown-Quelle: So erstellen Sie einen Parser
So erstellen Sie einen Artikel über die Befehlszeile
Ein Tool, das aus einem eigenständigen JAR eine ausführbare Datei macht
Ich habe versucht, Python aus einer Bat-Datei auszuführen
Ich habe ein Skript erstellt, um ein Snippet in README.md einzufügen
Ich habe ein Python-Modul erstellt, um Kommentare zu übersetzen
Ich möchte ein beliebtes Paket auf PyPi finden
Ich möchte eine Datei mit Python zufällig testen
So verwandeln Sie eine .py-Datei in eine .exe-Datei