Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Packaging Python

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

Packaging Python

Packaging de projets Python avec setuptools (Français)

Avatar for Axel Haustant

Axel Haustant

October 15, 2013
Tweet

Other Decks in Programming

Transcript

  1. Comment ? • standard • multiplateformes • documenté • à

    moindre coût La solution: s e t u p t o o l s ! “ 4
  2. setup.py f r o m s e t u p

    t o o l s i m p o r t s e t u p s e t u p ( n a m e = ' m y - p r o j e c t ' , v e r s i o n = ' 0 . 1 . 0 ' , # . . . ) C'est du Python donc tout est permis ! 6
  3. Versionning • respect des normes (PEP 386, semver...) • release:

    { m a j o r } . { m i n o r } . { p a t c h } • dev/master/...: { m a j o r } . { m i n o r } . { p a t c h } . d e v • Automatisez la release ! • script shell • outil dédié (ex: Zest.releaser, Bump'R, ...) 8
  4. Gestion des dépendances • install_requires • tests_require • extras_require e

    x t r a s _ r e q u i r e = { ' t e s t s ' : [ ' f a c t o r y - b o y ' ] } $ p i p i n s t a l l m y - p r o j e c t [ t e s t s ] 9
  5. README Doit permettre de démarrer rapidement. • Présentation fonctionnelle rapide

    • Procédure d'installation • Documentation (ou lien) • Complété par un changelog 11
  6. Développez Pour être prêt à développer: $ p y t

    h o n s e t u p . p y d e v e l o p # o u $ p i p i n s t a l l - e . A refaire dès que les dépendances et les entrypoints changent. 13
  7. Prévisualisez Contrôlez ce que vous allez publier $ p y

    t h o n s e t u p . p y - - l o n g - d e s c r i p t i o n | r s t 2 h t m l $ p y t h o n s e t u p . p y s d i s t 14
  8. Publiez # E n r e g i s t

    r e r l e m o d u l e s u r P y P I $ p y t h o n s e t u p . p y r e g i s t e r # P u b l i e r s u r P y P I $ p y t h o n s e t u p . p y s d i s t u p l o a d # C r é e r u n v e r s i o n a v e c u n s u f f i x $ p y t h o n s e t u p . p y - q e g g _ i n f o - b " . 1 2 3 4 " s d i s t 15
  9. Réutiliser les metadonnées du module Selon la PEP 396, le

    module doit contenir un attribut _ _ v e r s i o n _ _ f r o m p r o j e c t i m p o r t _ _ v e r s i o n _ _ , _ _ d e s c r i p t i o n _ _ s e t u p ( n a m e = ' p r o j e c t ' v e r s i o n = _ _ v e r s i o n _ _ d e s c r i p t i o n = _ _ d e s c r i p t i o n _ _ ) 17
  10. Réutiliser les requirements de pip R E _ R E

    Q U I R E M E N T = r e . c o m p i l e ( r ' ^ \ s * - r \ s * ( ? P < f i l e n a m e > . * ) $ ' ) d e f p i p ( f i l e n a m e ) : r e q u i r e m e n t s = [ ] f o r l i n e i n o p e n ( j o i n ( ' r e q u i r e m e n t s ' , f i l e n a m e ) ) . r e a d l i n e s ( ) : m a t c h = R E _ R E Q U I R E M E N T . m a t c h ( l i n e ) i f m a t c h : r e q u i r e m e n t s . e x t e n d ( p i p ( m a t c h . g r o u p ( ' f i l e n a m e ' ) ) ) e l s e : r e q u i r e m e n t s . a p p e n d ( l i n e ) r e t u r n r e q u i r e m e n t s s e t u p ( # . . . i n s t a l l _ r e q u i r e s = p i p ( ' i n s t a l l . p i p ' ) , t e s t s _ r e q u i r e = p i p ( ' t e s t . p i p ' ) , e x t r a s _ r e q u i r e = { ' t e s t s ' : p i p ( ' t e s t . p i p ' ) , } , ) 18
  11. Réutiliser les fichiers rst P Y P I _ R

    S T _ F I L T E R S = ( ( r ' \ . \ . \ s ? c o d e - b l o c k : : \ s * ( \ w | \ + ) + ' , ' : : ' ) , # ( r ' . * t r a v i s - c i \ . o r g / . * ' , ' ' ) , ( r ' . * p y p i p \ . i n / . * ' , ' ' ) , ( r ' . * c r a t e \ . i o / . * ' , ' ' ) , ( r ' . * c o v e r a l l s \ . i o / . * ' , ' ' ) , ) d e f r s t ( f i l e n a m e ) : c o n t e n t = o p e n ( f i l e n a m e ) . r e a d ( ) f o r r e g e x , r e p l a c e m e n t i n P Y P I _ R S T _ F I L T E R S : c o n t e n t = r e . s u b ( r e g e x , r e p l a c e m e n t , c o n t e n t ) r e t u r n c o n t e n t l o n g _ d e s c r i p t i o n = ' \ n ' . j o i n ( ( r s t ( ' R E A D M E . r s t ' ) , r s t ( ' C H A N G E L O G . r s t ' ) , ' ' ) ) 19
  12. Réutilisez la version t r y : f r o

    m p k g _ r e s o u r c e s i m p o r t g e t _ d i s t r i b u t i o n V E R S I O N = g e t _ d i s t r i b u t i o n ( ' p r o j e c t ' ) . v e r s i o n e x c e p t : V E R S I O N = _ _ i m p o r t _ _ ( ' p r o j e c t ' ) . _ _ v e r s i o n _ _ Prend en compte la version "installée" (ex: 0.1.0.dev1234) 20
  13. Console scripts Pas besoin de répertoire b i n e

    n t r y _ p o i n t s = { ' c o n s o l e _ s c r i p t s ' : [ ' m y e x e c = p r o j e c t . c o m m a n d s : m a i n ' , ] } $ m y e x e c 22
  14. Créer ses propres commandes e n t r y _

    p o i n t s = { ' d i s t u t i l s . c o m m a n d s ' : ' d o _ i t = p r o j e c t . c o m m a n d s : D o S o m e t h i n g ' , } , f r o m s e t u p t o o l s i m p o r t C o m m a n d c l a s s D o S o m e t h i n g ( C o m m a n d ) : d e s c r i p t i o n = " D o s o m e t h i n g " u s e r _ o p t i o n s = [ ] d e f i n i t i a l i z e _ o p t i o n s ( s e l f ) : p a s s d e f f i n a l i z e _ o p t i o n s ( s e l f ) : p a s s d e f r u n ( s e l f ) : d o _ s o m e t h i n g ( ) 23
  15. Chargement d'extensions Un project qui exporte e n t r

    y _ p o i n t s = { ' m y p r o j e c t . p l u g i n s ' : [ ' s o m e p l u g i n = o t h e r _ p r o j e c t . p l u g i n s : S o m e P l u g i n ' , ] , } , Un autre qui importe i m p o r t p k g _ r e s o u r c e s f o r e n t r y p o i n t i n p k g _ r e s o u r c e s . i t e r _ e n t r y _ p o i n t s ( ' m y p r o j e c t . p l u g i n s ' ) : p l u g i n = e n t r y p o i n t . l o a d ( ) 24
  16. 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 25
  17. Layout fi── d o c fi── m y p r

    o j e c t │ fi─ _ _ i n i t _ _ . p y │ └─ . . fi── r e q u i r e m e n t s │ fi─ d e v e l o p . p i p │ fi─ i n s t a l l . p i p │ fi─ t o o l s . p i p │ └─ t e s t . p i p fi─ . g i t i g n o r e fi─ M a k e f i l e / F a b f i l e fi─ b u m p r . r c fi─ C H A N G E L O G . r s t fi─ p e p 8 . r c fi─ p y l i n t . r c fi─ M A N I F E S T . i n fi─ R E A D M E . r s t └─ s e t u p . p y 29