SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
Packaging Python
Par Axel Haustant
Packaging ?
3

Pourquoi ?
• pour distribuer
• pour déployer
• pour archiver

“

Être réutilisable
4

Comment ?
• standard
• multiplateformes
• documenté
• à moindre coût

“

La solution: s t p o l !
eutos
Les bases
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

Identification
• name
• version
• description
• long_description
• url
• classifiers
• ...
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

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

Gestion des resources
• include_package_data/package_data
• MANIFEST.in
• pkg_resouces
11

README
Doit permettre de démarrer rapidement.
• Présentation fonctionnelle rapide
• Procédure d'installation
• Documentation (ou lien)
• Complété par un changelog
Commandes
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

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

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
Réutilisez !
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

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

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

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)
Entry Points
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

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

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

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
Questions
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
Extras
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

Weitere ähnliche Inhalte

Andere mochten auch

Algorithmique_et_programmation_part2
Algorithmique_et_programmation_part2Algorithmique_et_programmation_part2
Algorithmique_et_programmation_part2Emeric Tapachès
 
Python et les bases de données non sql
Python et les bases de données non sqlPython et les bases de données non sql
Python et les bases de données non sqlbchesneau
 
Chap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec pythonChap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec pythonMohammed TAMALI
 
Aiguille dans botte de foin: scikit-learn et joblib
Aiguille dans botte de foin: scikit-learn et joblibAiguille dans botte de foin: scikit-learn et joblib
Aiguille dans botte de foin: scikit-learn et joblibGael Varoquaux
 
Sondage aléatoire simple ou a probabilité égal
Sondage aléatoire simple ou a probabilité égal Sondage aléatoire simple ou a probabilité égal
Sondage aléatoire simple ou a probabilité égal hammamiahlem1
 
Je configure mes serveurs avec fabric et fabtools
Je configure mes serveurs avec fabric et fabtoolsJe configure mes serveurs avec fabric et fabtools
Je configure mes serveurs avec fabric et fabtoolsRonan Amicel
 
Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Emeric Tapachès
 
Scikit learn: apprentissage statistique en Python
Scikit learn: apprentissage statistique en PythonScikit learn: apprentissage statistique en Python
Scikit learn: apprentissage statistique en PythonGael Varoquaux
 
Scikit-learn: the state of the union 2016
Scikit-learn: the state of the union 2016Scikit-learn: the state of the union 2016
Scikit-learn: the state of the union 2016Gael Varoquaux
 
Rendez votre code Python plus beau !
Rendez votre code Python plus beau !Rendez votre code Python plus beau !
Rendez votre code Python plus beau !Ronan Amicel
 
SeSQL : un moteur de recherche en Python et PostgreSQL
SeSQL : un moteur de recherche en Python et PostgreSQLSeSQL : un moteur de recherche en Python et PostgreSQL
SeSQL : un moteur de recherche en Python et PostgreSQLParis, France
 
Presentation r markdown
Presentation r markdown Presentation r markdown
Presentation r markdown Cdiscount
 
SGBDR - ACCESS
SGBDR - ACCESSSGBDR - ACCESS
SGBDR - ACCESSMusatge
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Pythonyboussard
 
Bonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHPBonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHPPascal MARTIN
 
pandas: a Foundational Python Library for Data Analysis and Statistics
pandas: a Foundational Python Library for Data Analysis and Statisticspandas: a Foundational Python Library for Data Analysis and Statistics
pandas: a Foundational Python Library for Data Analysis and StatisticsWes McKinney
 
Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)salah fenni
 

Andere mochten auch (20)

Algorithmique_et_programmation_part2
Algorithmique_et_programmation_part2Algorithmique_et_programmation_part2
Algorithmique_et_programmation_part2
 
Python et les bases de données non sql
Python et les bases de données non sqlPython et les bases de données non sql
Python et les bases de données non sql
 
Chap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec pythonChap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec python
 
Aiguille dans botte de foin: scikit-learn et joblib
Aiguille dans botte de foin: scikit-learn et joblibAiguille dans botte de foin: scikit-learn et joblib
Aiguille dans botte de foin: scikit-learn et joblib
 
Sondage aléatoire simple ou a probabilité égal
Sondage aléatoire simple ou a probabilité égal Sondage aléatoire simple ou a probabilité égal
Sondage aléatoire simple ou a probabilité égal
 
Je configure mes serveurs avec fabric et fabtools
Je configure mes serveurs avec fabric et fabtoolsJe configure mes serveurs avec fabric et fabtools
Je configure mes serveurs avec fabric et fabtools
 
Python et NoSQL
Python et NoSQLPython et NoSQL
Python et NoSQL
 
Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2
 
Scikit learn: apprentissage statistique en Python
Scikit learn: apprentissage statistique en PythonScikit learn: apprentissage statistique en Python
Scikit learn: apprentissage statistique en Python
 
Scikit-learn: the state of the union 2016
Scikit-learn: the state of the union 2016Scikit-learn: the state of the union 2016
Scikit-learn: the state of the union 2016
 
Rendez votre code Python plus beau !
Rendez votre code Python plus beau !Rendez votre code Python plus beau !
Rendez votre code Python plus beau !
 
SeSQL : un moteur de recherche en Python et PostgreSQL
SeSQL : un moteur de recherche en Python et PostgreSQLSeSQL : un moteur de recherche en Python et PostgreSQL
SeSQL : un moteur de recherche en Python et PostgreSQL
 
Td pascal tdD
Td pascal tdDTd pascal tdD
Td pascal tdD
 
Presentation r markdown
Presentation r markdown Presentation r markdown
Presentation r markdown
 
SGBDR - ACCESS
SGBDR - ACCESSSGBDR - ACCESS
SGBDR - ACCESS
 
R versur Python
R versur PythonR versur Python
R versur Python
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Python
 
Bonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHPBonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHP
 
pandas: a Foundational Python Library for Data Analysis and Statistics
pandas: a Foundational Python Library for Data Analysis and Statisticspandas: a Foundational Python Library for Data Analysis and Statistics
pandas: a Foundational Python Library for Data Analysis and Statistics
 
Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)
 

Ähnlich wie Python packaging

Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5halleck45
 
Developpement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdfDeveloppement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdfrachidimstapha
 
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme webGestion des logs sur une plateforme web
Gestion des logs sur une plateforme webfredcons
 
Traquer les fuites mémoires avec Python
Traquer les fuites mémoires avec PythonTraquer les fuites mémoires avec Python
Traquer les fuites mémoires avec PythonVictor Stinner
 
Python appliqué en apprentissage automatique (Applied Python in Machine Learn...
Python appliqué en apprentissage automatique (Applied Python in Machine Learn...Python appliqué en apprentissage automatique (Applied Python in Machine Learn...
Python appliqué en apprentissage automatique (Applied Python in Machine Learn...Guillaume Chevalier
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++cppfrug
 
Chef - Paris BlockCamp - Nov 09
Chef - Paris BlockCamp - Nov 09Chef - Paris BlockCamp - Nov 09
Chef - Paris BlockCamp - Nov 09Olivier Gutknecht
 
PHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_ExtensionsPHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_Extensionsjulien pauli
 
Cas integration open_erp
Cas integration open_erpCas integration open_erp
Cas integration open_erpJoubi Aaziz
 
M2 INAE introduction python.pdf
M2 INAE introduction python.pdfM2 INAE introduction python.pdf
M2 INAE introduction python.pdfHajer Amdouni
 
SdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoireSdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoireAlexandru Radovici
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
 
Solr overview presentation
Solr overview presentationSolr overview presentation
Solr overview presentationspy-seth
 
Formation python micro club.net
Formation python micro club.netFormation python micro club.net
Formation python micro club.netZakaria SMAHI
 

Ähnlich wie Python packaging (20)

Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5
 
Developpement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdfDeveloppement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdf
 
Cours php bac info
Cours php bac infoCours php bac info
Cours php bac info
 
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme webGestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
 
Traquer les fuites mémoires avec Python
Traquer les fuites mémoires avec PythonTraquer les fuites mémoires avec Python
Traquer les fuites mémoires avec Python
 
Python appliqué en apprentissage automatique (Applied Python in Machine Learn...
Python appliqué en apprentissage automatique (Applied Python in Machine Learn...Python appliqué en apprentissage automatique (Applied Python in Machine Learn...
Python appliqué en apprentissage automatique (Applied Python in Machine Learn...
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Chef - Paris BlockCamp - Nov 09
Chef - Paris BlockCamp - Nov 09Chef - Paris BlockCamp - Nov 09
Chef - Paris BlockCamp - Nov 09
 
Cours php
Cours phpCours php
Cours php
 
Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
 
Python après 15 ans de JAVA
Python après 15 ans de JAVAPython après 15 ans de JAVA
Python après 15 ans de JAVA
 
PHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_ExtensionsPHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_Extensions
 
Cas integration open_erp
Cas integration open_erpCas integration open_erp
Cas integration open_erp
 
M2 INAE introduction python.pdf
M2 INAE introduction python.pdfM2 INAE introduction python.pdf
M2 INAE introduction python.pdf
 
SdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoireSdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoire
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
Solr overview presentation
Solr overview presentationSolr overview presentation
Solr overview presentation
 
Audits php
Audits phpAudits php
Audits php
 
Formation python micro club.net
Formation python micro club.netFormation python micro club.net
Formation python micro club.net
 

Python packaging

  • 3. 3 Pourquoi ? • pour distribuer • pour déployer • pour archiver “ Être réutilisable
  • 4. 4 Comment ? • standard • multiplateformes • documenté • à moindre coût “ La solution: s t p o l ! eutos
  • 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 Identification • name • version • description • long_description • url • classifiers • ...
  • 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 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 Gestion des resources • include_package_data/package_data • MANIFEST.in • pkg_resouces
  • 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
  • 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 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 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
  • 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 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 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 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)
  • 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 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 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 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
  • 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
  • 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