Forum Programmation.python Livrer un environnement Python

Posté par  (Mastodon) . Licence CC By‑SA.
Étiquettes :
6
11
déc.
2024

Bonjour,

Si je développe un truc en Python, je peux faire les choses proprement en me faisant un environnement virtuel (j'aime bcp venv). Ensuite avec un pip freeze j'ai ma liste des packages.

Bon, mais si quelqu'un désire utiliser mon travail, il va devoir se recréer un environnement virtuel, y faire son pip install, le sourcer puis ensuite exécuter mon code.

Est-ce qu'il existerait un truc plus immédiat, à la appimage, où tu peux tout empaqueter prêt à l'emploi ?

Merci !

  • # beaucoup d'options...

    Posté par  (site web personnel, Mastodon) . Évalué à 9 (+7/-0).

    … mais aucune vraiment à la fois ultra simple et ultra fonctionnelle. Suivant ton besoin (liste non exhaustive):

    • pyinstaller
    • pyoxydizer
    • py2exe
    • py2app
    • cx_freeze
    • briefcase
    • pyinst
    • conda constructor
    • pex
    • zipapp
    • shiv

    Voire carrément nuitka ou autre.

  • # Container

    Posté par  . Évalué à 0 (+2/-3).

    Peut-être un conteneur docker/podman ?

    C'est peut-être un peu lourd, mais ça doit marcher.

    L'informatique n'est pas une science exacte, on n'est jamais à l'abri d'un succès

    • [^] # Re: Container

      Posté par  . Évalué à 10 (+9/-0).

      Ya que moi que ça agace cette façon de mettre du conteneur partout ? C'est un peu comme il y a des années avec le XML …

      Ah attention, hein, attention ! Vous allez pas me refoutre docker ou podman sur le tapis à toutes les sauces, hein, parce que pfuit… :)

      • [^] # Re: Container

        Posté par  (site web personnel) . Évalué à 1 (+1/-1). Dernière modification le 13 décembre 2024 à 09:21.

        Bah là pour le coup, c'est assez adapté je trouve, tu livres un environnement de dev, isolé, qui fonctionne sans impacter l'éventuelle configuration et les logiciels de l’hôte. C'est plus propre que d'installer ça directement sur la machine à mon avis.

        • [^] # Re: Container

          Posté par  . Évalué à 6 (+4/-0).

          Ça dépend du type d'application je dirais. Si c'est un serveur web, oui. Ce n'est pas habituel pour une application desktop d'être livré dans une image OCI par contre.

      • [^] # Re: Container

        Posté par  . Évalué à 6 (+6/-1).

        Ya que moi que ça agace cette façon de mettre du conteneur partout ?

        Il y a des gens tu leur donnes un marteau, …

        C'est un peu comme il y a des années avec le XML …

        Heureusement maintenant on a YAML ;-)

      • [^] # Re: Container

        Posté par  (Mastodon) . Évalué à 10 (+7/-0).

        C'est un peu comme il y a des années avec le XML …

        "Le XML c'est comme la violence : si ça ne résout pas tous tes problèmes, c'est que tu ne l'as pas assez utilisé."

        En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

        • [^] # Re: Container

          Posté par  . Évalué à 3 (+0/-0).

          Oui avec toutes ces belle technos on pourrait résumer a un vieux dicton, d'un grand philosophe :

          Si vous avez un marteau, tout ressemble à un clou.

          Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • # Ceci n'est pas une réponse mais une question (parce que je suis curieux)

    Posté par  . Évalué à 4 (+3/-0).

    Bonjour, quand je veux utiliser le travail de quelqu'un d'autre en python je m'attend à trouver un package ( https://packaging.python.org/en/latest/guides/distributing-packages-using-setuptools/ ).
    Si il n'est pas disponible via pipy, je cherche à télécharger un package et à faire ensuite pour l'installer "python setup.py install".
    Ces procédures on le bon gout de ma laisser choisir entre une installation dans un pyenv ou en global, de gerer l'installation des modules dépendant, de compiler les fichiers c au besoin, etc.
    Que souhaite tu trouver comme fonctionnalité supplémentaire dans la méthodes que tu cherche ?

  • # Choisir un autre langage ?

    Posté par  . Évalué à 4 (+4/-1).

    Dans mon cas si je voulais que quelqu'un utilise un programme que j'ai codé, j'aurais plutôt tendance à choisir autre chose que Python.

    Un autre langage qui allie la simplicité et un écosystème assez riche : Go.

    Par exemple en Go, ta question ne se pose même pas, les virtualenv ça n'existe pas : tu fais juste "go build", et tu te retrouves avec un seul fichier exécutable! et sans aucune dépendance. N'importe qui pourra l'utiliser, même quelqu'un qui ne sait pas installer docker ni python.
    besoin d'un exécutable windows ?

    GOOS=windows GOARCH=x86_64 go build

    Le mettre sur le web:

    GOOS=js GOARCH=wasm go build

    Et ça même python ne peut pas faire !
    faire une application graphique compatible android/ios/linux/freebsd/mac/windows : fyne.io (python ne peut pas faire non plus)

    Et la meilleure cheat sheet que j'aie jamais vue de ma vie : https://golang.sk/images/blog/cheatsheets/go-cheat-sheet.pdf.

    Je ne suis pas venu pour taper sur python car je l'utilise plus souvent que go, mais c'est juste quand je vois "docker" pour envoyer son travail à quelqu'un, je me dis que quelque chose a merdé. j'aime bien les trucs simples, rapides, légers. pas les montagnes de complexité qui ne permettent même pas d'envoyer mon programme à ma mère ou à un pote.

  • # Utiliser = exécuter ou intégrer ?

    Posté par  . Évalué à 4 (+2/-0). Dernière modification le 17 décembre 2024 à 13:08.

    Si c'est pour exécuter, il est tout à fait possible (contrairement aux FUD "inexactitudes" régulièrement diffusées par les fanboys utilisateurs d'autres langages) de construire un exécutable python.

    Pour ma part, j'utilise PyInstaller. Avec un exemple ici qui construit un exécutable autonome pour visidata.

    Si c'est pour intégrer dans un autre projet alors il faut packager pour pypi.org, de manière à ce que les utilisateurs puissent faire un pip install ma_belle_bibliotheque_logicielle. Avec un exemple ici qui est une ligne de commande pour lufi. En particulier regarder le contenu des fichier "setup.py" et "publish.sh".

  • # Commentaire supprimé

    Posté par  . Évalué à -1 (+0/-2). Dernière modification le 17 décembre 2024 à 15:21.

    Ce commentaire a été supprimé par l’équipe de modération.

  • # Commentaire supprimé

    Posté par  . Évalué à 0 (+0/-1). Dernière modification le 21 décembre 2024 à 09:57.

    Ce commentaire a été supprimé par l’équipe de modération.

  • # PEP-723 et uv

    Posté par  (site web personnel, Mastodon) . Évalué à 2 (+0/-0).

    Attention à pip freeze, ça ne fonctionne que pour l’interpréteur (la version de python) et la plateforme où tu te trouves. Ce n’est pas universel.

    Le plus simple pour des outils admin/ligne de commande, c’est d’utiliser la capacité d’uv d’être compatible avec PEP-723 (qui permet de décrire les dépendances dans le fichier directement)

    Exemple pour liste les 10 premières PEP avec un script python qui requiert des dépendances mais qui pour une raison ou une autre a besoin d’un python ≥3.11 (ce que sait installer uv)

    foo.py

    #!/usr/bin/env -S uv run -q
    # /// script
    # requires-python = ">=3.11"
    # dependencies = [
    #   "requests<3",
    #   "rich",
    # ]
    # ///
    
    import requests
    from rich.pretty import pprint
    
    resp = requests.get("https://peps.python.org/api/peps.json")
    data = resp.json()
    pprint([(k, v["title"]) for k, v in data.items()][:10])
    $ chmod +x foo.py
    $ ./foo.py

    Ta seule dépendance c’est d’avoir uv installé sur ta machine (binaire sans dépendance).

    P.S. Le script et les dépendances sont débiles, mais ça permet de donner un exemple.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.