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

Packaging Python

Packaging Python

Packaging de projets Python avec setuptools (Français)

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