Python packaging

865 vues

Publié le

Packaging de projets Python avec setuptools (Français)

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
865
Sur SlideShare
0
Issues des intégrations
0
Intégrations
6
Actions
Partages
0
Téléchargements
8
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Python packaging

  1. 1. Packaging Python Par Axel Haustant
  2. 2. Packaging ?
  3. 3. 3 Pourquoi ? • pour distribuer • pour déployer • pour archiver “ Être réutilisable
  4. 4. 4 Comment ? • standard • multiplateformes • documenté • à moindre coût “ La solution: s t p o l ! eutos
  5. 5. Les bases
  6. 6. 6 setup.py fo stpol ipr stp rm eutos mot eu stp eu( nm=m-rjc' ae'ypoet, vrin'..' eso=010, #.. . ) C'est du Python donc tout est permis !
  7. 7. 7 Identification • name • version • description • long_description • url • classifiers • ...
  8. 8. 8 Versionning • respect des normes (PEP 386, semver...) • release: { a o } { i o } { a c } mjr.mnr.pth • dev/master/...: { a o } { i o } { a c } d v mjr.mnr.pth.e • Automatisez la release ! • script shell • outil dédié (ex: Zest.releaser, Bump'R, ...)
  9. 9. 9 Gestion des dépendances • install_requires • tests_require • extras_require eta_eur ={ xrsrqie 'et' [fcoyby] tss: 'atr-o' } $ppisalm-rjc[et] i ntl ypoettss
  10. 10. 10 Gestion des resources • include_package_data/package_data • MANIFEST.in • pkg_resouces
  11. 11. 11 README Doit permettre de démarrer rapidement. • Présentation fonctionnelle rapide • Procédure d'installation • Documentation (ou lien) • Complété par un changelog
  12. 12. Commandes
  13. 13. 13 Développez Pour être prêt à développer: $pto stpp dvlp yhn eu.y eeo #o u $ppisal- . i ntl e A refaire dès que les dépendances et les entrypoints changent.
  14. 14. 14 Prévisualisez Contrôlez ce que vous allez publier $pto stpp -ln-ecito |rthm yhn eu.y -ogdsrpin s2tl $pto stpp sit yhn eu.y ds
  15. 15. 15 Publiez #Ergsrrl mdl srPP neite e oue u yI $pto stpp rgse yhn eu.y eitr #PbirsrPP ule u yI $pto stpp situla yhn eu.y ds pod #Céru vrinae u sfi re n eso vc n ufx $pto stpp - egif - "13"sit yhn eu.y q g_no b .24 ds
  16. 16. Réutilisez !
  17. 17. 17 Réutiliser les metadonnées du module Selon la PEP 396, le module doit contenir un attribut _ v r i n _ _eso_ fo poetipr _vrin_ _dsrpin_ rm rjc mot _eso_, _ecito_ stp eu( nm=poet ae'rjc' vrin_vrin_ eso=_eso_ dsrpin_dsrpin_ ecito=_ecito_ )
  18. 18. 18 Réutiliser les requirements de pip R_EURMN =r.opl('*rs(Pflnm>*$) ERQIEET ecmier^s-*?<ieae.)' dfppflnm) e i(ieae: rqieet =[ eurmns ] frln i oe(on'eurmns,flnm).edie(: o ie n pnji(rqieet' ieae)ralns) mth=R_EURMN.ac(ie ac ERQIEETmthln) i mth f ac: rqieet.xedppmthgop'ieae)) eurmnsetn(i(ac.ru(flnm') es: le rqieet.pedln) eurmnsapn(ie rtr rqieet eun eurmns stp eu( #.. . isalrqie=i(isalpp) ntl_eurspp'ntl.i', tssrqiepp'etpp) et_eur=i(ts.i', eta_eur ={ xrsrqie 'et' pp'etpp) tss: i(ts.i', } , )
  19. 19. 19 Réutiliser les fichiers rst PP_S_ITR =( YIRTFLES ('..s cd-lc:*|++, ':) # r? oebok:s(w)' :', ('*rvscog.' ') r.tai-i.r/*, ', ('*yii/*,') r.ppp.n.' ', ('*rti/*,') r.cae.o.' ', ('*oeali/*,') r.cvrls.o.' ', ) dfrtflnm) e s(ieae: cnet=oe(ieae.ed) otn pnflnm)ra( frrgx rpaeeti PP_S_ITR: o ee, elcmn n YIRTFLES cnet=r.u(ee,rpaeet cnet otn esbrgx elcmn, otn) rtr cnet eun otn ln_ecito ='n.on( ogdsrpin 'ji( rt'EDErt) s(RAM.s', rt'HNEO.s', s(CAGLGrt) ' ' ) )
  20. 20. 20 Réutilisez la version ty r: fo pgrsucsipr gtdsrbto rm k_eore mot e_itiuin VRIN=gtdsrbto(poet)vrin ESO e_itiuin'rjc'.eso ecp: xet VRIN=_ipr_(poet)_vrin_ ESO _mot_'rjc'._eso_ Prend en compte la version "installée" (ex: 0.1.0.dev1234)
  21. 21. Entry Points
  22. 22. 22 Console scripts Pas besoin de répertoire b n i etypit= nr_ons{ 'osl_cit' [ cnoesrps: 'yxc=poetcmad:an, mee rjc.omnsmi' ] } $mee yxc
  23. 23. 23 Créer ses propres commandes etypit ={ nr_ons 'ittl.omns:'oi =poetcmad:ooehn' dsuiscmad' d_t rjc.omnsDSmtig, } , fo stpol ipr Cmad rm eutos mot omn casDSmtigCmad: ls ooehn(omn) dsrpin="osmtig ecito D oehn" ue_pin =[ srotos ] dfiiilz_pin(ef: e ntaieotossl) ps as dffnlz_pin(ef: e iaieotossl) ps as dfrnsl) e u(ef: d_oehn( osmtig)
  24. 24. 24 Chargement d'extensions Un project qui exporte etypit ={ nr_ons 'yrjc.lgn' [ mpoetpuis: 'oelgn=ohrpoetpuisSmPui' smpui te_rjc.lgn:oelgn, ] , } , Un autre qui importe ipr pgrsucs mot k_eore fretyon i pgrsucsie_nr_ons'yrjc.lgn': o nrpit n k_eore.tretypit(mpoetpuis) pui =etyon.od) lgn nrpitla(
  25. 25. 25 Un peu de lecture • Documentation officielle de setuptools • The Hitchhiker's Guide to Packaging • PEP 386 (numéro de version) • PEP 396 (version d'un module) • PEP 345 (métadonnées) • PEP 426 (métadonnées 2.0) • semver
  26. 26. Questions
  27. 27. 27 A suivre... • présentation: • http://noirbizarre.github.io/slides/paris.py/ • http://slides.noirbizarre.info/paris.py/ • blog: http://noirbizarre.info • twitter: @noirbizarre • google+: noirbizarre
  28. 28. Extras
  29. 29. 29 Layout ── d c o ── m p o e t yrjc │ ─ _ii_.y _nt_p │ └─ . . ── r q i e e t eurmns │ ─ dvlppp eeo.i │ ─ isalpp ntl.i │ ─ tospp ol.i │ └─ t s . i etpp ─ .iinr gtgoe ─ Mkfl/afl aeieFbie ─ bmrr up.c ─ CAGLGrt HNEO.s ─ pp.c e8r ─ pln.c yitr ─ MNFS.n AIETi ─ RAM.s EDErt └─ s t p p eu.y fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi

×