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
{ 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
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
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
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
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
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
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
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
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
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