'3.12.6 | packaged by conda-forge | (main, Sep 30 2024, 18:08:52) [GCC 13.3.0]'
Cette partie du site présente un élément qui n’est pas propre à
Python
mais qui est néanmoins indispensable : la pratique de Git
.
Une grande partie du contenu de la partie provient d’un cours dédié fait avec Romain Avouac
Dérouler les slides ci-dessous ou cliquer ici pour afficher les slides en plein écran.
1 Introduction
1.1 Le problème
La démarche naturelle quand on commence à travailler longuement sur un projet pour lequel on veut éviter d’effacer et perdre son code à cause d’une erreur humaine est de dupliquer les fichiers et créer des versions multiples d’un même code qui sont des instantanés à un moment donné :
Ceci est une manière de sauvegarder l’évolution de son code et donc la vie d’un projet. Néanmoins c’est une manière très artisanale de procéder qui n’efface pas l’erreur humaine puisqu’il est toujours possible de faire une erreur lors de la duplication du fichier ou d’oublier de sauvegarder une version qui nous satisfaisait.
Cette pratique présente de nombreux inconvénients. Le premier est le fait que la recherche d’information pertinente, par exemple sur l’introduction d’un bug, est compliquée par cette structure dupliquée. Il est difficile, sans rentrer dans le détail de chaque fichier, de connaître son évolution réelle entre deux dates. Pour l’extraction d’information, il serait beaucoup plus pertinent de construire des fichiers de l’évolution entre telle ou telle version mais cela requiert de nombreux gestes manuels et un temps conséquent. Le deuxième problème est qu’on ne sait pas forcément, quand on revient quelques jours plus tard sur le projet, pourquoi on a enregistré telle ou telle version : quand on est le 28 novembre, se souvient-on de ce qui distingue les versions du 4 mai 12:37 et 16:02 ?
Si on ajoute la dimension collaborative du travail sur le code, on voit rapidement d’autres inconvénients à cette approche artisanale. En premier lieu, quelqu’un reprenant le projet aura du mal à rentrer dans celui-ci. De plus, il sera encore plus difficile pour cette personne de rechercher l’information pertinente sur les choix de version faits: cet historique lui est finalement inutile. D’autant que se pose la question du partage de ces codes: par quel biais cet ensemble de fichiers est-il partagé ? Par mails ? Sur un disque partagé ? Mais que se passe-t-il si plusieurs participants du projet travaillent en même temps dessus ? Comment organiser la collaboration et réconcilier les changements s’ils ont lieu de manière conjointe ?
1.2 La solution technique: Git
Git
apporte une réponse technique à ces très nombreuses questions. Ce logiciel spécialisé dans le contrôle de version, c’est-à-dire dans le suivi des évolutions d’un projet, vient résoudre de nombreux problèmes liés à la mise en oeuvre de projets de data science dans les organisations. L’objet de ce chapitre est de présenter quelques concepts nécessaires à la compréhension de Git
et présenter la manière dont celui-ci vient aider à gérer l’évolution d’un projet informatique. Le chapitre suivant introduira à la manière dont Git
fluidifie la collaboration au sein d’équipes impliquées dans des projets de data science. Ceci est devenu indispensable car l’époque où les data scientists travaillaient tous seuls sur des notebooks est révolue. Les projets de data science sont devenus, dans la plupart des organisations, plus ambitieux et impliquent souvent plusieurs personnes avec des profils diverses1, il est donc nécessaire d’avoir de la discipline pour que la collaboration soit fluide.
3 Contenu de la partie
L’apprentissage de Git
est décliné en deux chapitres:
- Le premier est consacré à présenter la logique générale de
Git
, les concepts importants et à illustrer ceux-ci par la pratique dans un cadre de travail individuel. - Le second chapitre est consacré aux enjeux liés au travail collaboratif
L’objectif général de cette partie est de démystifier Git
. Si la découverte en autodidacte peut être particulièrement douloureuse, ce n’est pas le cas en étant accompagné par une ressource proposant une illustration des concepts importants par la pratique et complixifiant le cadre d’usage de Git
de manière progressive.
Git
mais qui constituent les concepts utiles à sa compréhension sont définis dans les marges des deux prochains chapitres comme cela est montré ici.Informations additionnelles
environment files have been tested on.
Latest built version: 2024-11-20
Python version used:
Package | Version |
---|---|
affine | 2.4.0 |
aiobotocore | 2.15.1 |
aiohappyeyeballs | 2.4.3 |
aiohttp | 3.10.8 |
aioitertools | 0.12.0 |
aiosignal | 1.3.1 |
alembic | 1.13.3 |
altair | 5.4.1 |
aniso8601 | 9.0.1 |
annotated-types | 0.7.0 |
appdirs | 1.4.4 |
archspec | 0.2.3 |
asttokens | 2.4.1 |
attrs | 24.2.0 |
babel | 2.16.0 |
bcrypt | 4.2.0 |
beautifulsoup4 | 4.12.3 |
black | 24.8.0 |
blinker | 1.8.2 |
blis | 0.7.11 |
bokeh | 3.5.2 |
boltons | 24.0.0 |
boto3 | 1.35.23 |
botocore | 1.35.23 |
branca | 0.7.2 |
Brotli | 1.1.0 |
cachetools | 5.5.0 |
cartiflette | 0.0.2 |
Cartopy | 0.24.1 |
catalogue | 2.0.10 |
cattrs | 24.1.2 |
certifi | 2024.8.30 |
cffi | 1.17.1 |
charset-normalizer | 3.3.2 |
click | 8.1.7 |
click-plugins | 1.1.1 |
cligj | 0.7.2 |
cloudpathlib | 0.20.0 |
cloudpickle | 3.0.0 |
colorama | 0.4.6 |
comm | 0.2.2 |
commonmark | 0.9.1 |
conda | 24.9.1 |
conda-libmamba-solver | 24.7.0 |
conda-package-handling | 2.3.0 |
conda_package_streaming | 0.10.0 |
confection | 0.1.5 |
contextily | 1.6.2 |
contourpy | 1.3.0 |
cryptography | 43.0.1 |
cycler | 0.12.1 |
cymem | 2.0.8 |
cytoolz | 1.0.0 |
dask | 2024.9.1 |
dask-expr | 1.1.15 |
databricks-sdk | 0.33.0 |
debugpy | 1.8.6 |
decorator | 5.1.1 |
Deprecated | 1.2.14 |
diskcache | 5.6.3 |
distributed | 2024.9.1 |
distro | 1.9.0 |
docker | 7.1.0 |
duckdb | 0.10.1 |
en-core-web-sm | 3.7.1 |
entrypoints | 0.4 |
et_xmlfile | 2.0.0 |
exceptiongroup | 1.2.2 |
executing | 2.1.0 |
fastexcel | 0.11.6 |
fastjsonschema | 2.20.0 |
fiona | 1.10.1 |
Flask | 3.0.3 |
folium | 0.17.0 |
fontawesomefree | 6.6.0 |
fonttools | 4.54.1 |
frozendict | 2.4.4 |
frozenlist | 1.4.1 |
fsspec | 2023.12.2 |
gensim | 4.3.2 |
geographiclib | 2.0 |
geopandas | 1.0.1 |
geoplot | 0.5.1 |
geopy | 2.4.1 |
gitdb | 4.0.11 |
GitPython | 3.1.43 |
google-auth | 2.35.0 |
graphene | 3.3 |
graphql-core | 3.2.4 |
graphql-relay | 3.2.0 |
graphviz | 0.20.3 |
great-tables | 0.12.0 |
greenlet | 3.1.1 |
gunicorn | 22.0.0 |
h2 | 4.1.0 |
hpack | 4.0.0 |
htmltools | 0.6.0 |
hyperframe | 6.0.1 |
idna | 3.10 |
imageio | 2.36.0 |
importlib_metadata | 8.5.0 |
importlib_resources | 6.4.5 |
inflate64 | 1.0.0 |
ipykernel | 6.29.5 |
ipython | 8.28.0 |
itsdangerous | 2.2.0 |
jedi | 0.19.1 |
Jinja2 | 3.1.4 |
jmespath | 1.0.1 |
joblib | 1.4.2 |
jsonpatch | 1.33 |
jsonpointer | 3.0.0 |
jsonschema | 4.23.0 |
jsonschema-specifications | 2024.10.1 |
jupyter-cache | 1.0.0 |
jupyter_client | 8.6.3 |
jupyter_core | 5.7.2 |
kaleido | 0.2.1 |
kiwisolver | 1.4.7 |
langcodes | 3.5.0 |
language_data | 1.3.0 |
lazy_loader | 0.4 |
libmambapy | 1.5.9 |
locket | 1.0.0 |
lxml | 5.3.0 |
lz4 | 4.3.3 |
Mako | 1.3.5 |
mamba | 1.5.9 |
mapclassify | 2.8.1 |
marisa-trie | 1.2.1 |
Markdown | 3.6 |
markdown-it-py | 3.0.0 |
MarkupSafe | 2.1.5 |
matplotlib | 3.9.2 |
matplotlib-inline | 0.1.7 |
mdurl | 0.1.2 |
menuinst | 2.1.2 |
mercantile | 1.2.1 |
mizani | 0.11.4 |
mlflow | 2.16.2 |
mlflow-skinny | 2.16.2 |
msgpack | 1.1.0 |
multidict | 6.1.0 |
multivolumefile | 0.2.3 |
munkres | 1.1.4 |
murmurhash | 1.0.10 |
mypy-extensions | 1.0.0 |
narwhals | 1.14.1 |
nbclient | 0.10.0 |
nbformat | 5.10.4 |
nest_asyncio | 1.6.0 |
networkx | 3.3 |
nltk | 3.9.1 |
numpy | 1.26.4 |
opencv-python-headless | 4.10.0.84 |
openpyxl | 3.1.5 |
opentelemetry-api | 1.16.0 |
opentelemetry-sdk | 1.16.0 |
opentelemetry-semantic-conventions | 0.37b0 |
OWSLib | 0.28.1 |
packaging | 24.1 |
pandas | 2.2.3 |
paramiko | 3.5.0 |
parso | 0.8.4 |
partd | 1.4.2 |
pathspec | 0.12.1 |
patsy | 0.5.6 |
Pebble | 5.0.7 |
pexpect | 4.9.0 |
pickleshare | 0.7.5 |
pillow | 10.4.0 |
pip | 24.2 |
platformdirs | 4.3.6 |
plotly | 5.24.1 |
plotnine | 0.13.6 |
pluggy | 1.5.0 |
polars | 1.8.2 |
preshed | 3.0.9 |
prometheus_client | 0.21.0 |
prometheus_flask_exporter | 0.23.1 |
prompt_toolkit | 3.0.48 |
protobuf | 4.25.3 |
psutil | 6.0.0 |
ptyprocess | 0.7.0 |
pure_eval | 0.2.3 |
py7zr | 0.20.8 |
pyarrow | 17.0.0 |
pyarrow-hotfix | 0.6 |
pyasn1 | 0.6.1 |
pyasn1_modules | 0.4.1 |
pybcj | 1.0.2 |
pycosat | 0.6.6 |
pycparser | 2.22 |
pycryptodomex | 3.21.0 |
pydantic | 2.9.2 |
pydantic_core | 2.23.4 |
Pygments | 2.18.0 |
PyNaCl | 1.5.0 |
pynsee | 0.1.8 |
pyogrio | 0.10.0 |
pyOpenSSL | 24.2.1 |
pyparsing | 3.1.4 |
pyppmd | 1.1.0 |
pyproj | 3.7.0 |
pyshp | 2.3.1 |
PySocks | 1.7.1 |
python-dateutil | 2.9.0 |
python-dotenv | 1.0.1 |
python-magic | 0.4.27 |
pytz | 2024.1 |
pyu2f | 0.1.5 |
pywaffle | 1.1.1 |
PyYAML | 6.0.2 |
pyzmq | 26.2.0 |
pyzstd | 0.16.2 |
querystring_parser | 1.2.4 |
rasterio | 1.4.2 |
referencing | 0.35.1 |
regex | 2024.9.11 |
requests | 2.32.3 |
requests-cache | 1.2.1 |
retrying | 1.3.4 |
rich | 13.9.4 |
rpds-py | 0.21.0 |
rsa | 4.9 |
ruamel.yaml | 0.18.6 |
ruamel.yaml.clib | 0.2.8 |
s3fs | 2023.12.2 |
s3transfer | 0.10.2 |
scikit-image | 0.24.0 |
scikit-learn | 1.5.2 |
scipy | 1.13.0 |
seaborn | 0.13.2 |
setuptools | 74.1.2 |
shapely | 2.0.6 |
shellingham | 1.5.4 |
six | 1.16.0 |
smart-open | 7.0.5 |
smmap | 5.0.0 |
sortedcontainers | 2.4.0 |
soupsieve | 2.5 |
spacy | 3.7.5 |
spacy-legacy | 3.0.12 |
spacy-loggers | 1.0.5 |
SQLAlchemy | 2.0.35 |
sqlparse | 0.5.1 |
srsly | 2.4.8 |
stack-data | 0.6.2 |
statsmodels | 0.14.4 |
tabulate | 0.9.0 |
tblib | 3.0.0 |
tenacity | 9.0.0 |
texttable | 1.7.0 |
thinc | 8.2.5 |
threadpoolctl | 3.5.0 |
tifffile | 2024.9.20 |
toolz | 1.0.0 |
topojson | 1.9 |
tornado | 6.4.1 |
tqdm | 4.66.5 |
traitlets | 5.14.3 |
truststore | 0.9.2 |
typer | 0.13.1 |
typing_extensions | 4.12.2 |
tzdata | 2024.2 |
Unidecode | 1.3.8 |
url-normalize | 1.4.3 |
urllib3 | 1.26.20 |
wasabi | 1.1.3 |
wcwidth | 0.2.13 |
weasel | 0.4.1 |
webdriver-manager | 4.0.2 |
websocket-client | 1.8.0 |
Werkzeug | 3.0.4 |
wheel | 0.44.0 |
wordcloud | 1.9.3 |
wrapt | 1.16.0 |
xgboost | 2.1.1 |
xlrd | 2.0.1 |
xyzservices | 2024.9.0 |
yarl | 1.13.1 |
yellowbrick | 1.5 |
zict | 3.0.0 |
zipp | 3.20.2 |
zstandard | 0.23.0 |
View file history
SHA | Date | Author | Description |
---|---|---|---|
21db4db | 2024-09-30 11:42:26 | lgaliana | Marges |
3e04253 | 2024-09-30 10:11:32 | Lino Galiana | Grosse mise à jour de la partie Git (#557) |
c9f9f8a | 2024-04-24 15:09:35 | Lino Galiana | Dark mode and CSS improvements (#494) |
005d89b | 2023-12-20 17:23:04 | Lino Galiana | Finalise l’affichage des statistiques Git (#478) |
09654c7 | 2023-11-14 15:16:44 | Antoine Palazzolo | Suggestions Git & Visualisation (#449) |
57f108f | 2023-11-10 10:59:36 | linogaliana | Intro git |
154f09e | 2023-09-26 14:59:11 | Antoine Palazzolo | Des typos corrigées par Antoine (#411) |
9a4e226 | 2023-08-28 17:11:52 | Lino Galiana | Action to check URL still exist (#399) |
3bdf3b0 | 2023-08-25 11:23:02 | Lino Galiana | Simplification de la structure 🤓 (#393) |
30823c4 | 2023-08-24 14:30:55 | Lino Galiana | Liens morts navbar (#392) |
2dbf853 | 2023-07-05 11:21:40 | Lino Galiana | Add nice featured images (#368) |
f21a24d | 2023-07-02 10:58:15 | Lino Galiana | Pipeline Quarto & Pages 🚀 (#365) |
34cc32c | 2022-10-14 22:05:47 | Lino Galiana | Relecture Git (#300) |
f394b23 | 2022-10-13 14:32:05 | Lino Galiana | Dernieres modifs geopandas (#298) |
0e01c33 | 2021-11-10 12:09:22 | Lino Galiana | Relecture @antuki API+Webscraping + Git (#178) |
9a3f7ad | 2021-10-31 18:36:25 | Lino Galiana | Nettoyage partie API + Git (#170) |
aeb3995 | 2021-07-06 11:11:03 | avouacr | Relecture et ajouts sur anaconda + jupyter (#116) |
4cdb759 | 2021-05-12 10:37:23 | Lino Galiana | :sparkles: :star2: Nouveau thème hugo :snake: :fire: (#105) |
Notes de bas de page
Ce constat est le point de départ du cours de “Mise en production de projets data science” disponible sur ensae-reproductibilite.github.io/website/ que Romain Avouac et moi donnons à la fin de la scolarité de l’ENSAE.↩︎
Citation
@book{galiana2023,
author = {Galiana, Lino},
title = {Python pour la data science},
date = {2023},
url = {https://pythonds.linogaliana.fr/},
doi = {10.5281/zenodo.8229676},
langid = {fr}
}
2 Comment utiliser
Git
quand on fait duPython
?Git
est un logiciel de contrôle de version, c’est-à-dire un logiciel en charge d’enregistrer les évolutions d’un fichier dans le temps (ce qu’on appelle versionner). Ce n’est pas un packagePython
, ce ne sera pas par ce biais que nous l’utiliserons.Les utilisateurs de
Python
peuvent utiliserGit
par le biais de deux intermédiaires: par le biais de la ligne de commande ou par le biais d’extensions graphiques dans leurs environnements de développement (VSCode
,Jupyter
, etc.). Sur leSSPCloud
, l’infrastructure recommandée pour ce cours, nous avons la possibilité pour faire duGit
par les deux approches mais nous allons principalement utiliser l’interface graphique deVSCode
qui réduit le coût d’entrée dansGit
.Git
fait parti des pratiques collaboratives devenues standards dans le domaine de l’open-source mais également de plus en plus communes dans les administrations et entreprises de la data science.Il existe de nombreuses ressources sur l’utilisation de
Git
sur internet. Malheureusement, beaucoup sont techniques et font l’hypothèse d’une connaissance déjà poussée de certaines notions informatiques utiles à la compréhension deGit
. Ce cours ne fera pas de telles hypothèses, à l’exception d’une connaissance minimale de la logique de filesystem, c’est-à-dire de la manière dont s’organisent des fichiers sur un ordinateur.En ce qui concerne les contenus proches de celui-ci, une série de ressources de formation a été rassemblée par l’Insee sur ce site.