CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[python] Consensus sur les outils de gestion de dépendance / packaging ?

[Black_Spirit]
[Black_Spirit]
Niveau 19
07 octobre 2021 à 12:04:25

Hello tout le monde,

Je voulais savoir si y avait un consensus sur la manière de gérer les dépendances + packager une application en python.

Je suis en train de lire la documentation de la Python Packaging Authority (https://www.pypa.io/en/latest/) et il y a, en effet, quelques recommendations.

Par exemple dans les outils conseillés (https://packaging.python.org/guides/tool-recommendations/) ils conseillent d'utiliser pipenv pour la gestion des dépendances et setuptools (donc les fichiers setup.py/setup.cfg) pour la distribution des packages.

Cependant, j'ai du mal à voir quel "workflow" appliquer dans une routine de développement classique, dans le cas d'un projet python qui serait packagé/distribué.

Par exemple, de notre côté, on a un workflow très classique où on utilise pip avec un fichier requirements.txt, venv et setup.py. Mais ce workflow engendre qqes problèmes. Le premier c'est que le fichier requirements.txt n'est pas toujours en adéquation avec l'environnement virtuel installé sur les machines locales. Le deuxième c'est que la synchro des dépendances entre le fichier requirements.txt et le fichier setup.py est gérée manuellement.

A ceux qui taf en python, vous avez un workflow qui corrige ce genre de problèmes ? Peut être faudrait-il utiliser pip-tools ? Poetry ? Et dans quel cas utiliser le fichier pyproject.toml ?

Merci d'avance :)

[Black_Spirit]
[Black_Spirit]
Niveau 19
11 octobre 2021 à 09:25:46

Up :)

Pseudo supprimé
Pseudo supprimé 11 octobre 2021 à 13:47:17

Comme c'est mignon

[Black_Spirit]
[Black_Spirit]
Niveau 19
13 octobre 2021 à 11:25:55

En attendant personne a répondu donc la question est pas si triviale que ça.

Je relance du coup, y a bien des gens qui taffent en python ici quand même ?

Kasmir
Kasmir
Niveau 10
13 octobre 2021 à 13:08:52

le fichier requirements.txt n'est pas toujours en adéquation avec l'environnement virtuel installé sur les machines locales.

Je comprends pas ce point, a quel moment c'est possible ça ? Tu crées ton venv et tu installes t'es dépendances. Si des ajouts sont faits au resquirements.txt tu relances une installation des dépendances ton venv.

[Black_Spirit]
[Black_Spirit]
Niveau 19
13 octobre 2021 à 13:55:38

Bah le seul fait que ça soit "manuel" ça suffit.

Rien oblige un dev à mettre à jour son environnement local qd y a une modification du fichier requirements.txt.
A l'inverse, certains devs ajoutent une dépendance dans leur environnement local mais oublient de push la modification du fichier requirements.txt, du coup qqun d'autre le fait à la volée mais a pas les mêmes versions, donc ils auront pas le même environnement local.
Et rien oblige un dev à installer les dépendances dans un environnment virtuel non plus, le fichier requirements.txt impose pas l'utilisation d'un environnement virtuel venv. Des cas possibles y en a pleins.

Bien sûr on pourrait répondre "ils ont qu'à bien utiliser l'outil". Certes, mais en attendant c'est pas à moi de surveiller ce que les autres font sur leur ordinateur local.

D'où ma question, en gros plus y a des choses à faire manuellement plus on augmente le risque d'erreur donc je me demandais si y avait pas un workflow plus "automatisé".

Là comme ça je dirais Poetry ou pip-tool, mais j'aimerais bien des témoignages de gens qui les ont utilisés.

Message édité le 13 octobre 2021 à 13:58:15 par [Black_Spirit]
godrik
godrik
Niveau 30
14 octobre 2021 à 03:14:04

Black_spirit, desole je voyagais donc j'ai mis un peu de temps a repondre.

De ce que j'ai vu, la source principale de dependence de developpement c'est setup.py. C'est la que tu encode concretement les dependances.
requirements.txt c'est utilise pour deployer ton logicile avec les dependances dans une version precise. (Oui, concretement tu peux mettre des dependances non exacte dans requirements.txt, mais non en fait, lire la suite.) Du coup ton environmenet de test automatique devrait recharger requirements.txt a chaque deployment. Et probablement ton script de deployement devrait faire ca. La plupart des hoster font ca en pratique.

Le probleme fondamentale que tu recontres est que l'environment de python c'est YOLO. Tu n'as vraiment aucune garantie de rien du tout. Quand tu recupere un paquet debian, tu sais que le paquet a ete verifie par les developeur debian. Quand tu recupere un paquet sur pip, tu ne sais absolument rien. En theorie, il y a du versionnement semantique et tu peux retirer retirer les paquet qui marche pas, et il y a des paquet beta. Mais en pratique, c'est le grand ouest et une grosse partie de la communaute fait n'importe quoi.

Donc concretement tu ne peux pas suppose que ton application marchera avec une mise a jour de n'importe quel paquet. Du coup il faut fixer toutes les versions de tous les paquets dans requirements.txt ou sinon tu ne peux etre sur d'absolument rien. Et il faut aussi avoir une batterie de test qui couvre tout le code parcequ'encore une fois tu ne peux etre sur de rien parcequ'a chaque changement d'une dependance, tu pourrais avoir une refonte complete de l'API alors que seulement le patchlevel a change parceque personne ne verifie rien sur les repo de pip.

Oui, python c'est l'horreur pour faire du developpement logiciel.

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment