[PYTHON] J'ai créé un package pour créer un fichier exécutable à partir du code source Hy

Hypo Comme le titre l'indique, je l'ai tellement fait que c'est une publicité.

introduction

Vous ne le connaissez peut-être pas en premier lieu, mais Hy est un ** dialecte Lisp qui fonctionne sur une machine virtuelle Python **. Par exemple, si vous lisez Squid Lisp: Hy écrit en Python, vous pouvez comprendre l'atmosphère. Vous pouvez le comprendre comme la ** version Clojure Python ** pour JVM. Ou plutôt, ** cela ressemble à Clojure **, vous pouvez donc mettre en évidence la syntaxe avec markdown ou ReST pour la putain de langue mineure.

Hy lui-même peut être exécuté avec un interpréteur dédié, mais la surcharge de l'analyse syntaxique n'est pas bonne. Par conséquent, il est bon d'utiliser la commande jointe hyc après l'avoir convertie en un fichier .pyc (script Python compilé par octets). Il est également possible de le convertir en fichier .py en utilisant la même commande jointe hy2py, mais ** en général, il ne peut pas être utilisé tel quel **. Par conséquent, il ne peut être utilisé qu'à des fins de débogage. En effet, les AST Python générés par Hy ont souvent des noms de symboles qui ne sont normalement pas disponibles en Python. (Par exemple, le nom de variable généré par gensym commence par:)

Ce qui précède n'est pas très bon lorsque vous souhaitez écrire une petite application qui simplifie vos tâches quotidiennes en utilisant Hy. C'est une histoire que vous n'avez qu'à écrire un Makefile dès que vous hyc, mais ce n'est pas si cool **. De plus, pour Pythonista, c'est un peu désagréable de voir le fichier .pyc tous les jours **.

Ensuite, ** Le code source Hy est mis ensemble dans un format exécutable ** a été créé, donc cet article a été créé. ** Sujet principal **.

Installation

S'il vous plaît de PyPI.

$ sudo pip install hypo

Comment utiliser

$ hypo -o Nom de sortie Fichier source 1 Fichier source 2..

Il est utilisé comme ça. Si l'option -o est omise, la sortie sera nommée ʻa. Au fait, le point d'entrée de l'application est ici le fichier source 1`. Notez que seuls les fichiers «.hy» sont acceptés pour l'entrée. Le résultat est zipapp Cordialement, c'est un fichier d'archive, mais comme il a reçu l'autorisation d'exécution à l'avance, vous pouvez le considérer comme un binaire d'exécution. ne pas.

Exemple d'utilisation

Par exemple, essayez de créer une application composée des deux fichiers suivants.

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))))

À propos, ces codes sont les suivants en Python.

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)

Normalement, la récursivité n'est pas utilisée en Python, mais les langages fonctionnels sont récursifs. Cependant, comme il ne s'agit pas de ** récurrence de queue **, je refuserai que ce soit un code qui ne soit pas bon pour Lisper. hylang.org/en/latest/contrib/loop.html) Utilisez la macro.

Alors, revenons au sujet principal. Exécutez la commande suivante à partir du terminal. Cette fois, nous allons le construire avec le nom «exemple».

$ hypo -o example main.hy iota.hy

Ensuite, un fichier appelé «exemple» sera créé dans le répertoire courant, alors essayez de l'exécuter.

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

Le contenu de main.hy est exécuté. À ce stade, le fichier compilé en .pyc est appelé à l'intérieur du fichier d'exécution, il est donc un peu plus rapide que de s'exécuter à partir de l'interpréteur Hy. De plus, c'est ** spécifications Hy ** que la sortie numérique n'est pas bonne.

Résumé

J'ai présenté comment utiliser ** Le code source Hy est assemblé dans un format exécutable ** avec un sentiment de malice. Il ne convient pas pour faire des applications à très grande échelle, mais j'espère que vous l'utiliserez. C'est un package écrit en quelques heures pour tuer le temps en vacances, donc si vous avez des bogues ou des demandes, veuillez faire pull request [issue](https: // github.com/koji-kojiro/hylang-hypo/issues) Veuillez le lancer. Merci d'avoir lu jusqu'ici.

Recommended Posts

J'ai créé un package pour créer un fichier exécutable à partir du code source Hy
J'ai créé un outil pour créer un nuage de mots à partir de wikipedia
Comment utiliser NUITKA-Utilities hinted-compilation pour créer facilement un fichier exécutable à partir d'un script Python
Flux du code source à la création du format d'exécution
Créer un fichier deb à partir d'un package python
Créer un fichier qui peut être exécuté dans le langage de script
J'ai créé un outil pour compiler nativement Hy
J'ai créé un outil pour générer du Markdown à partir du fichier JSON Scrapbox exporté
J'ai créé un code pour convertir illustration2vec en modèle Keras
J'ai écrit du code Python pour créer un diagramme de dépendance de table (vue) (PlantUML) à partir de SQL
J'ai créé un package pour filtrer les séries chronologiques avec python
Je veux installer le package de requirements.txt avec poésie
Je vous ai fait exécuter des commandes depuis un navigateur WEB
J'ai créé un outil pour générer automatiquement un simple diagramme ER à partir de l'instruction CREATE TABLE
Comment créer un package Conda
Comment créer un fichier de configuration
Python> J'ai créé un code de test pour mon propre fichier externe
Je souhaite créer une liste de paramètres à partir du code CloudFormation (yaml)
J'ai créé un fichier de sous-titres (SRT) à partir des données JSON d'AmiVoice
J'ai trouvé un moyen de créer un modèle 3D à partir de photos Partie 01 Créer un environnement
J'ai créé un script POST pour créer un problème sur Github et l'enregistrer dans le projet
J'ai essayé de créer un linebot (préparation)
J'ai fait un script pour afficher des pictogrammes
Comment créer un référentiel à partir d'un média
J'ai créé un outil pour convertir Jupyter py en ipynb avec VS Code
Script pour créer un fichier de dictionnaire Mac
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai créé un fichier de configuration avec Python
Utilisez BeautifulSoup pour extraire un lien contenant une chaîne d'un fichier HTML
J'ai créé une bibliothèque pour faire fonctionner la pile AWS CloudFormation à partir de CUI (Python Fabric)
Regroupez le nombre d'étapes par jour à partir des données de santé iPhone pour créer un fichier CSV
J'ai créé une commande appdo pour exécuter des commandes dans le contexte de l'application
J'ai essayé d'extraire le dessin au trait de l'image avec Deep Learning
Modifier Excel à partir de Python pour créer un tableau croisé dynamique
J'ai créé un fichier de dictionnaire python pour Neocomplete
Je souhaite créer facilement un modèle de bruit
J'ai créé un package extenum qui étend enum
Comment créer un objet fonction à partir d'une chaîne
Je veux créer une fenêtre avec Python
Comment créer un fichier JSON en Python
Je souhaite créer un type d'implémentation pouvant être branché
J'ai créé un outil pour obtenir de nouveaux articles
Je veux créer du code C ++ à partir de code Python!
Je veux écrire dans un fichier avec Python
Créer un nuage de mots à partir de programmes académiques
Lire la source Python-Markdown: Comment créer un analyseur
Comment créer un article à partir de la ligne de commande
Un outil qui transforme un jar autonome en un fichier exécutable
J'ai essayé d'exécuter python à partir d'un fichier chauve-souris
J'ai fait un script pour mettre un extrait dans README.md
J'ai créé un module Python pour traduire les commentaires
Je veux trouver un package populaire sur PyPi
Je veux échantillonner au hasard un fichier avec Python
Comment transformer un fichier .py en fichier .exe