{"id":1245,"date":"2026-08-21T14:28:33","date_gmt":"2026-08-21T14:28:33","guid":{"rendered":"https:\/\/matforge.org\/?p=1245","raw":"https:\/\/matforge.org\/?p=1245"},"modified":"2026-08-21T14:28:33","modified_gmt":"2026-08-21T14:28:33","slug":"managing-dependencies-scientific-python-lockfiles-environments","status":"publish","type":"post","link":"https:\/\/matforge.org\/fr\/managing-dependencies-scientific-python-lockfiles-environments\/","title":{"rendered":"G\u00e9rer les d\u00e9pendances en Python scientifique : fichiers de verrouillage, environnements et reproductibilit\u00e9","raw":"G\u00e9rer les d\u00e9pendances en Python scientifique : fichiers de verrouillage, environnements et reproductibilit\u00e9"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 10<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><p>La gestion des d\u00e9pendances en python scientifique est l&rsquo;une des parties les plus importantes de la recherche reproductible. Une simulation peut \u00e9chouer des mois plus tard, car les versions des packages ont chang\u00e9, un interpr\u00e9teur Python d\u00e9cal\u00e9 ou une biblioth\u00e8que num\u00e9rique mise \u00e0 jour d&rsquo;une mani\u00e8re qui affecte les r\u00e9sultats.<\/p>\n<p>Ce guide explique comment les fichiers de verrouillage, les environnements et les gestionnaires de paquets modernes aident les chercheurs \u00e0 conserver des flux de travail scientifiques Python reproductibles, portables et plus faciles \u00e0 entretenir.<\/p>\n<h2>Points \u00e0 retenir cl\u00e9s<\/h2>\n<ul>\n<li>Les fichiers de verrouillage sont l&rsquo;une des \u00e9tapes les plus percutantes pour les flux de travail Scientific Python reproductibles.<\/li>\n<li><code>uv<\/code> est un gestionnaire de paquets moderne et rapide et est de plus en plus utilis\u00e9 comme alternative au PIP, aux outils PIP et \u00e0 la po\u00e9sie.<\/li>\n<li>PEP 751 introduit un format de fichier de verrouillage standardis\u00e9, <code>pylock.toml<\/code>, pour r\u00e9duire la fragmentation de l&rsquo;outil.<\/li>\n<li>Conda reste important pour les projets scientifiques Python avec des d\u00e9pendances non-Python telles que C, C++, MPI, HDF5 et CUDA.<\/li>\n<li>Votre choix d&rsquo;outil doit correspondre \u00e0 votre flux de travail&nbsp;: <code>uv<\/code> pour la rapidit\u00e9 et la reproductibilit\u00e9, Conda pour les piles scientifiques et HPC et la po\u00e9sie pour les pipelines de publication matures.<\/li>\n<\/ul>\n<h2>Le mode de d\u00e9faillance cach\u00e9e en Python scientifique<\/h2>\n<p>Chaque chercheur en informatique scientifique voit finalement le m\u00eame probl\u00e8me. Une simulation a fonctionn\u00e9 le mois dernier, mais elle \u00e9choue d\u00e9sormais avec une incompatibilit\u00e9 de version. Pire, il peut encore fonctionner mais produire des r\u00e9sultats subtilement diff\u00e9rents.<\/p>\n<p>Ce n&rsquo;est pas seulement un inconv\u00e9nient. C&rsquo;est un \u00e9chec de reproductibilit\u00e9. L&rsquo;environnement de calcul a chang\u00e9, y compris les versions de package, les interpr\u00e9teurs Python ou les d\u00e9pendances de niveau inf\u00e9rieur. Votre code est cass\u00e9 ou produit en silence des r\u00e9sultats qui ne sont plus \u00e9quivalents \u00e0 l&rsquo;ex\u00e9cution d&rsquo;origine.<\/p>\n<p>La cause profonde est g\u00e9n\u00e9ralement des d\u00e9pendances non \u00e9pingl\u00e9es. M\u00eame lorsque le code est contr\u00f4l\u00e9 en version, le travail reste li\u00e9 \u00e0 une machine sp\u00e9cifique et \u00e0 un moment donn\u00e9 si l&rsquo;environnement n&rsquo;est pas reproductible.<\/p>\n<p>Le python scientifique rend ce probl\u00e8me particuli\u00e8rement grave. Contrairement \u00e0 de nombreux projets Web, le calcul scientifique d\u00e9pend souvent de cha\u00eenes complexes de biblioth\u00e8ques num\u00e9riques, de packages compil\u00e9s et de constructions sensibles au mat\u00e9riel. NumPy, Scipy, Fipy, HDF5, MPI, OpenBlas et les versions sp\u00e9cifiques de Python doivent fonctionner ensemble.<\/p>\n<p>La solution consiste \u00e0 g\u00e9rer d\u00e9lib\u00e9r\u00e9ment les d\u00e9pendances. Utilisez des fichiers de verrouillage pour geler les versions exactes, suivre les environnements dans le contr\u00f4le de version et documenter la fa\u00e7on dont l&rsquo;environnement doit \u00eatre recr\u00e9\u00e9.<\/p>\n<h2>Qu&rsquo;est-ce qu&rsquo;un fichier de verrouillage&nbsp;?<\/h2>\n<p>Un fichier de verrouillage est un instantan\u00e9 de l&rsquo;environnement logiciel exact d&rsquo;un projet. Il enregistre les versions sp\u00e9cifiques de toutes les d\u00e9pendances, y compris les sous-d\u00e9pendances, qui ont \u00e9t\u00e9 install\u00e9es lors de la derni\u00e8re configuration du projet.<\/p>\n<p>Consid\u00e9rez-le comme une recette congel\u00e9e pour la configuration de votre logiciel. Tout le monde peut recr\u00e9er le m\u00eame environnement plus tard, m\u00eame si les versions de packages ont chang\u00e9 en amont.<\/p>\n<h3>sans fichiers de verrouillage<\/h3>\n<pre><code class=\"language-bash\"># requirements.txt without a lockfile\nnumpy&gt;=1.25.0\nscipy&gt;=1.11.0\nfipy&gt;=4.3.0\n\n# On another machine or after a month:\npip install -r requirements.txt\n\n# This might install newer versions:\n# numpy 1.26.x, scipy 1.12.x, or different dependency builds\n<\/code><\/pre>\n<p>Ce type de configuration permet aux versions de package de changer. Le code peut toujours s&rsquo;ex\u00e9cuter, mais le comportement num\u00e9rique, la pr\u00e9cision, le comportement du solveur ou les internes de d\u00e9pendance peuvent changer.<\/p>\n<h3>avec des fichiers de verrouillage<\/h3>\n<pre><code class=\"language-bash\"># uv.lock or another lockfile records exact resolved versions\n\nuv sync\n\n# Anyone who runs the sync command gets the same resolved environment\n<\/code><\/pre>\n<p>Cela est important pour les projets de simulation, car les biblioth\u00e8ques num\u00e9riques peuvent modifier les chemins de code entre les versions. Le comportement \u00e0 virgule flottante peut diff\u00e9rer entre les builds. Les solveurs PDE et les cadres scientifiques peuvent \u00e9galement se comporter diff\u00e9remment d&rsquo;une version \u00e0 l&rsquo;autre.<\/p>\n<p>Un fichier de verrouillage r\u00e9duit cette incertitude en rendant l&rsquo;installation d\u00e9terministe.<\/p>\n<h2>Le paysage de la gestion des d\u00e9pendances Python<\/h2>\n<p>L&rsquo;\u00e9cosyst\u00e8me Python dispose de plusieurs options pratiques de gestion des d\u00e9pendances. Chaque outil a des atouts diff\u00e9rents, et le bon choix d\u00e9pend de la question de savoir si le projet est pur Python, ax\u00e9 sur HPC, orient\u00e9 package ou construit pour la reproductibilit\u00e9 \u00e0 long terme.<\/p>\n<h3>UV : l&rsquo;option rapide moderne<\/h3>\n<p><code>uv<\/code> est un gestionnaire de packages bas\u00e9 sur la rouille construit par Astral. Il vise \u00e0 remplacer plusieurs outils Python courants, notamment PIP, PIP-Tools, PIPX, PYENV et VirtualEnv, par un seul flux de travail rapide.<\/p>\n<p>Les chercheurs passent \u00e0 <code>uv<\/code> pour plusieurs raisons&nbsp;:<\/p>\n<ol>\n<li>vitesse. <code>uv<\/code> peut installer des packages beaucoup plus rapidement que les flux de travail traditionnels bas\u00e9s sur PIP, en particulier avec la mise en cache.<\/li>\n<li>Fichier de verrouillage universel. Un seul <code>uv.lock<\/code> peut prendre en charge les installations reproductibles sur toutes les plates-formes.<\/li>\n<li>Compatibilit\u00e9 PIP. Les commandes telles que <code>uv pip install<\/code> facilitent la migration.<\/li>\n<li>Gestion des versions Python. <code>uv<\/code> peut installer et g\u00e9rer des interpr\u00e9teurs Python, ce qui r\u00e9duit le besoin d&rsquo;outils distincts.<\/li>\n<li>Installation autonome. <code>uv<\/code> n&rsquo;exige pas que Python soit install\u00e9 en premier.<\/li>\n<\/ol>\n<p>Utilisez <code>uv<\/code> pour de nouveaux projets o\u00f9 la vitesse, la reproductibilit\u00e9 et la simple migration de PIP Matter.<\/p>\n<p>Il est particuli\u00e8rement utile pour :<\/p>\n<ul>\n<li>Nouveaux projets de simulation.<\/li>\n<li>Pipelines CI\/CD o\u00f9 l&rsquo;heure d&rsquo;installation est importante.<\/li>\n<li>Les projets qui ont besoin de gestion des d\u00e9pendances et de gestion des versions Python.<\/li>\n<li>Les \u00e9quipes migrent depuis PIP ou PIP-Tools.<\/li>\n<\/ul>\n<h4>Flux de travail UV de base<\/h4>\n<pre><code class=\"language-bash\"># Install uv\ncurl -LsSf https:\/\/astral.sh\/uv\/install.sh | sh\n\n# Create a new project with Python 3.11\nuv init my-simulation --python 3.11\ncd my-simulation\n\n# Add dependencies\nuv add numpy scipy fipy\n\n# Generate a lockfile\nuv lock\n\n# Sync to install from the lockfile\nuv sync\n<\/code><\/pre>\n<p>Le principal compromis est que la po\u00e9sie a encore des flux de travail de publication m\u00fbrs et une gestion avanc\u00e9e des groupes de d\u00e9pendances. Si vous maintenez un package scientifique Python pour Pypi, la po\u00e9sie peut toujours \u00eatre attrayante.<\/p>\n<h3>Po\u00e9sie : le chef de projet \u00e9tabli<\/h3>\n<p>La po\u00e9sie est un outil complet de gestion de projet. Il g\u00e8re la r\u00e9solution de d\u00e9pendances, les environnements virtuels, la cr\u00e9ation de packages et la publication sur Pypi.<\/p>\n<p>Les chercheurs choisissent toujours la po\u00e9sie pour plusieurs raisons :<\/p>\n<ol>\n<li>groupes de d\u00e9pendances. La po\u00e9sie peut s\u00e9parer proprement le d\u00e9veloppement, les tests, la documentation et les d\u00e9pendances CI.<\/li>\n<li>Publication du workflow. Il dispose d&rsquo;un support int\u00e9gr\u00e9 pour la cr\u00e9ation et la publication de packages.<\/li>\n<li>\u00c9cosyst\u00e8me m\u00fbr. La po\u00e9sie a des ann\u00e9es d&rsquo;utilisation de la production, une documentation approfondie et une grande communaut\u00e9.<\/li>\n<\/ol>\n<p>Utilisez de la po\u00e9sie lorsque&nbsp;:<\/p>\n<ul>\n<li>Vous publiez un package Python sur Pypi.<\/li>\n<li>Vous avez besoin d&rsquo;une gestion des groupes de d\u00e9pendances \u00e0 maturit\u00e9<\/li>\n<li>Votre \u00e9quipe valorise une longue exp\u00e9rience et une documentation \u00e9tablie.<\/li>\n<\/ul>\n<p>Le compromis est la vitesse. La po\u00e9sie peut prendre plus de <code>uv<\/code> pour les installations froides, la g\u00e9n\u00e9ration de fichiers de verrouillage et les ajouts de packages. Pour les petits projets, cela n&rsquo;a peut-\u00eatre pas d&rsquo;importance. Pour les grands projets et les pipelines CI, la diff\u00e9rence peut devenir perceptible.<\/p>\n<h3>Conda : la base scientifique<\/h3>\n<p>Conda reste l&rsquo;un des outils les plus importants pour Python scientifique, en particulier lorsque le projet a besoin de d\u00e9pendances non-Python.<\/p>\n<p>Conda est utile pour la recherche car il peut g\u00e9rer les packages Python, les packages R, les biblioth\u00e8ques compil\u00e9es, les compilateurs, les MPI, HDF5, CUDA et d&rsquo;autres d\u00e9pendances au niveau du syst\u00e8me dans un seul environnement.<\/p>\n<p>Conda est important lorsque :<\/p>\n<ul>\n<li>Vous avez besoin de d\u00e9pendances non-Python telles que C, C++, MPI, HDF5, FFTW ou CUDA.<\/li>\n<li>Vous ciblez les clusters HPC.<\/li>\n<li>Vos biblioth\u00e8ques scientifiques d\u00e9pendent du code C ou Fortran compil\u00e9.<\/li>\n<li>Vous travaillez \u00e0 travers Python et R.<\/li>\n<\/ul>\n<p>Le compromis est que Conda peut \u00eatre plus lent que <code>uv<\/code> pour la r\u00e9solution de d\u00e9pendance pure-python et peut ne pas produire facilement des fichiers de verrouillage multi-plateformes universels.<\/p>\n<h4>Flux de travail Conda de base<\/h4>\n<pre><code class=\"language-bash\"># Create environment\nconda create -n my-sim python=3.11\nconda activate my-sim\n\n# Install packages, including non-Python dependencies\nconda install numpy scipy hdf5 openmpi\n\n# Export to environment file\nconda env export --no-builds | grep -v \"prefix:\" &gt; environment.yml\n\n# Restore the environment\nconda env create -f environment.yml\n<\/code><\/pre>\n<h3>PIP-Tools : l&rsquo;option minimaliste<\/h3>\n<p><code>pip-tools<\/code> Comble les flux de travail et les fichiers de verrouillage PIP traditionnels. Il est l\u00e9ger et reste proche de l&rsquo;interface PIP.<\/p>\n<p>Utilisez les outils PIP lorsque&nbsp;:<\/p>\n<ul>\n<li>Vous voulez une approche simple.<\/li>\n<li>Vous migrez \u00e0 partir de PIP et ne souhaitez pas apprendre un outil plus grand.<\/li>\n<li>Votre projet est petit et n&rsquo;a pas besoin de groupes de d\u00e9pendances avanc\u00e9s.<\/li>\n<\/ul>\n<p>Le compromis est que PIP-Tools peut g\u00e9n\u00e9rer des fichiers de sortie sp\u00e9cifiques \u00e0 la plate-forme. Il est \u00e9galement moins complet que la po\u00e9sie ou <code>uv<\/code>.<\/p>\n<h2>PEP 751 : L&rsquo;avenir des lockfiles<\/h2>\n<p>PEP 751 propose un format de fichier standardis\u00e9 pour l&rsquo;enregistrement des d\u00e9pendances Python afin que les environnements puissent \u00eatre install\u00e9s de mani\u00e8re reproductible. Ce format est appel\u00e9 <code>pylock.toml<\/code>.<\/p>\n<h3>Ce que \u00e7a r\u00e9sout<\/h3>\n<p>Les outils de d\u00e9pendance Python ont toujours utilis\u00e9 diff\u00e9rents formats de fichier de verrouillage. PDM, PIP Freeze, PIP-Tools, Poetry et <code>uv<\/code> Tous les environnements approchent le verrouillage diff\u00e9remment.<\/p>\n<p>Cela cr\u00e9e plusieurs probl\u00e8mes :<\/p>\n<ul>\n<li>Verrouillage du fournisseur. Il peut \u00eatre difficile de basculer entre les outils.<\/li>\n<li>Fragmentation des outils. Les scanners de s\u00e9curit\u00e9 et les outils d&rsquo;automatisation peuvent prendre en charge uniquement certains formats.<\/li>\n<li>difficult\u00e9 d&rsquo;audit. Diff\u00e9rents formats ont une syntaxe et des conventions diff\u00e9rentes.<\/li>\n<\/ul>\n<p>PEP 751 propose <code>pylock.toml<\/code> comme format standardis\u00e9.<\/p>\n<h3>Pourquoi c&rsquo;est important pour le python scientifique<\/h3>\n<p>Le format propos\u00e9 est utile pour la recherche car il s&rsquo;agit de :<\/p>\n<ul>\n<li>Lisible par l&rsquo;homme, en utilisant TOML.<\/li>\n<li>g\u00e9n\u00e9r\u00e9s par la machine, afin que les outils puissent \u00e9crire une sortie coh\u00e9rente.<\/li>\n<li>Consommable par des outils non Python.<\/li>\n<li>S\u00e9curisez par la conception, avec des hachages cryptographiques pour la protection de la cha\u00eene d&rsquo;approvisionnement.<\/li>\n<li>Assez flexible pour repr\u00e9senter plusieurs environnements ou groupes de d\u00e9pendance.<\/li>\n<\/ul>\n<p>Une fois largement adopt\u00e9, <code>pylock.toml<\/code> peut r\u00e9duire le besoin de formats de fichier de verrouillage sp\u00e9cifiques \u00e0 l&rsquo;outil. Pour les chercheurs, cela signifie une meilleure interop\u00e9rabilit\u00e9. Un fichier de verrouillage peut \u00eatre consomm\u00e9 par n&rsquo;importe quel outil conforme et audit\u00e9 plus facilement par des services externes.<\/p>\n<h2>Le spectre de reproductibilit\u00e9<\/h2>\n<p>La reproductibilit\u00e9 est un spectre. Le bon niveau d\u00e9pend du risque, de la dur\u00e9e du projet et des exigences de publication.<\/p>\n<table class=\"custom-table\">\n<tbody>\n<tr>\n<th>Niveau<\/th>\n<th>Approche<\/th>\n<th>Co\u00fbt<\/th>\n<th>reproductibilit\u00e9<\/th>\n<th>le mieux pour<\/th>\n<\/tr>\n<tr>\n<td>Bon<\/td>\n<td>D\u00e9pendances de documents dans Readme<\/td>\n<td>Minimale<\/td>\n<td>V\u00e9rification manuelle<\/td>\n<td>Scripts et tutoriels rapides<\/td>\n<\/tr>\n<tr>\n<td>Mieux<\/td>\n<td>Fichier d&rsquo;environnement tel que <code>requirements.txt<\/code> ou <code>environment.yml<\/code><\/td>\n<td>Faible<\/td>\n<td>Installation automatis\u00e9e<\/td>\n<td>Projets et collaborateurs partag\u00e9s<\/td>\n<\/tr>\n<tr>\n<td>Meilleur<\/td>\n<td>LockFile Plus Environnement contr\u00f4l\u00e9 par la version<\/td>\n<td>Mod\u00e9rer<\/td>\n<td>reproduction exacte<\/td>\n<td>Publications et archives \u00e0 long terme<\/td>\n<\/tr>\n<tr>\n<td>Maximum<\/td>\n<td>Containerisation avec Docker ou Singularit\u00e9<\/td>\n<td>Haut<\/td>\n<td>Forte isolation<\/td>\n<td>HPC et flux de travail publi\u00e9s<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Pour les projets de recherche, le minimum est de fixer des versions exactes dans <code>requirements.txt<\/code> ou <code>environment.yml<\/code>. L&rsquo;approche recommand\u00e9e consiste \u00e0 utiliser <code>uv lock<\/code> ou \u00e0 l&rsquo;exportation Conda pour g\u00e9n\u00e9rer un fichier d&rsquo;environnement reproductible. La meilleure pratique consiste \u00e0 suivre ce fichier dans Git et \u00e0 documenter comment recr\u00e9er l&rsquo;environnement dans le fichier README.<\/p>\n<h2>Flux de travail pratiques pour des projets scientifiques<\/h2>\n<h3>Workflow&nbsp;1&nbsp;: nouveau projet de simulation avec UV<\/h3>\n<pre><code class=\"language-bash\"># Initialize project\nuv init my-simulation --python 3.11\ncd my-simulation\n\n# Add core dependencies\nuv add numpy scipy matplotlib\n\n# Add scientific libraries\nuv add fipy mpmath\n\n# Generate lockfile\nuv lock\n\n# Add dev dependencies\nuv add --group dev pytest black ruff\n\n# Commit everything\ngit add pyproject.toml uv.lock\ngit commit -m \"Initial project structure with pinned dependencies\"\n<\/code><\/pre>\n<p>Cela fonctionne parce que le fichier <code>uv.lock<\/code> est valid\u00e9 dans Git. Toute personne clonant le r\u00e9f\u00e9rentiel et en cours d&rsquo;ex\u00e9cution <code>uv sync<\/code> obtient les m\u00eames versions r\u00e9solues.<\/p>\n<h3>Workflow 2 : Projet HPC avec Conda et Singularit\u00e9<\/h3>\n<pre><code class=\"language-bash\"># On your workstation\nconda create -n hpc-sim python=3.11\nconda activate hpc-sim\nconda install numpy scipy hdf5 openmpi\n\n# Export environment\nconda env export --no-builds | grep -v \"prefix:\" &gt; environment.yml\n\n# Build Singularity image from Docker\ndocker build -t my-sim:latest .\nsingularity build my-sim.sif docker:\/\/my-sim:latest\n\n# Transfer to HPC cluster\nscp my-sim.sif hpc-cluster:\/scratch\/\n<\/code><\/pre>\n<p>Cela fonctionne parce que Conda g\u00e8re les d\u00e9pendances sur le poste de travail, tandis que Singularity fournit une conteneurisation compatible HPC. Le fichier <code>environment.yml<\/code> peut \u00eatre contr\u00f4l\u00e9 en version et recr\u00e9\u00e9 sur un autre syst\u00e8me.<\/p>\n<h3>Flux de travail&nbsp;3&nbsp;: migration du PIP vers les UV<\/h3>\n<pre><code class=\"language-bash\"># Start with existing requirements.txt\npip install uv\n\n# Replace pip with uv for installs\nuv pip install -r requirements.txt\n\n# Generate a uv lockfile\nuv lock\n\n# From now on, use uv sync instead of pip install\nuv sync\n<\/code><\/pre>\n<p>Ce chemin de migration est simple car <code>uv<\/code> est compatible avec de nombreux flux de travail de style PIP. Le fichier <code>uv.lock<\/code> devient la source unique de v\u00e9rit\u00e9 pour l&rsquo;environnement.<\/p>\n<h2>erreurs courantes et comment les \u00e9viter<\/h2>\n<h3>Erreur&nbsp;1&nbsp;: Utilisation des d\u00e9pendances non \u00e9pingl\u00e9es<\/h3>\n<pre><code class=\"language-python\"># WRONG: Allows automatic updates\nnumpy&gt;=1.0\nscipy&gt;=1.0\n\n# RIGHT: Pin exact versions\nnumpy==1.26.4\nscipy==1.11.4\n<\/code><\/pre>\n<p>Les modifications de version mineures peuvent modifier le comportement num\u00e9rique, les crit\u00e8res de convergence ou la pr\u00e9cision \u00e0 virgule flottante. \u00c9pinglez les versions exactes lorsque la reproductibilit\u00e9 est importante.<\/p>\n<h3>Erreur&nbsp;2&nbsp;: Ne valider aucun fichier de verrouillage<\/h3>\n<p>Si votre r\u00e9f\u00e9rentiel contient <code>pyproject.toml<\/code> mais pas de fichier de verrouillage, votre projet n&rsquo;est pas enti\u00e8rement reproductible. Un fichier de verrouillage est l&rsquo;exigence minimale pour les constructions d\u00e9terministes.<\/p>\n<p>G\u00e9n\u00e9rez un fichier de verrouillage et validez-le&nbsp;:<\/p>\n<pre><code class=\"language-bash\">uv lock  # or conda export\ngit add uv.lock  # or environment.yml\ngit commit -m \"Add lockfile for reproducible environment\"\n<\/code><\/pre>\n<h3>Erreur&nbsp;3&nbsp;: ignorer les sous-d\u00e9pendances<\/h3>\n<p>M\u00eame si vous \u00e9pinglez des packages de niveau sup\u00e9rieur, les sous-d\u00e9pendances peuvent toujours changer de comportement.<\/p>\n<pre><code class=\"language-python\"># If you pin fipy but not its dependencies:\n# numpy, mpmath, and other packages may upgrade independently\n<\/code><\/pre>\n<p>Utilisez un outil qui r\u00e9sout et \u00e9pingle l&rsquo;arbre de d\u00e9pendances complet, tel que <code>uv<\/code>, Conda ou Po\u00e9sie.<\/p>\n<h3>Erreur&nbsp;4&nbsp;: environnements sp\u00e9cifiques \u00e0 la plate-forme<\/h3>\n<p>Certains outils peuvent g\u00e9n\u00e9rer une sortie sp\u00e9cifique \u00e0 la plate-forme. Si vous d\u00e9veloppez sur macOS mais que vous d\u00e9ployez sous Linux, les fichiers d&rsquo;environnement peuvent \u00e9chouer ou r\u00e9soudre diff\u00e9remment.<\/p>\n<p>Utilisez des outils qui prennent en charge les fichiers de verrouillage multi-plateformes ou g\u00e9n\u00e9rez des fichiers de verrouillage sur la plate-forme cible.<\/p>\n<h3>Erreur&nbsp;5&nbsp;: D\u00e9pendances de donn\u00e9es externes<\/h3>\n<p>Si une simulation d\u00e9pend d&rsquo;API ou de bases de donn\u00e9es externes qui changent, la reproductibilit\u00e9 peut s&rsquo;arr\u00eater m\u00eame lorsque l&rsquo;environnement Python est verrouill\u00e9.<\/p>\n<p>Snapshot Donn\u00e9es externes lorsque cela est possible. Si cela n&rsquo;est pas possible, utilisez des points de terminaison d&rsquo;API versionn\u00e9s et documentez la version exacte ou la date d&rsquo;acc\u00e8s.<\/p>\n<h2>Ce que nous recommandons : un cadre de d\u00e9cision<\/h2>\n<p>Utilisez ce cadre de d\u00e9cision lors du choix d&rsquo;un outil de gestion de la d\u00e9pendance pour un projet scientifique Python.<\/p>\n<ol>\n<li>\n<p>Avez-vous besoin de d\u00e9pendances non-Python telles que C, C++, MPI, CUDA, HDF5 ou FFTW&nbsp;?<\/p>\n<ul>\n<li>Oui&nbsp;: utilisez Conda ou utilisez Conda \u00e0 l&rsquo;int\u00e9rieur de Docker ou Singularit\u00e9.<\/li>\n<li>Non : passez \u00e0 la question suivante.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Publiez-vous un package Python sur Pypi&nbsp;?<\/p>\n<ul>\n<li>Oui&nbsp;: envisagez la po\u00e9sie pour les flux de travail d&rsquo;\u00e9dition matures ou <code>uv<\/code> pour la vitesse.<\/li>\n<li>Non : passez \u00e0 la question suivante.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Travaillez-vous dans des pipelines CI\/CD&nbsp;?<\/p>\n<ul>\n<li>Oui&nbsp;: utilisez <code>uv<\/code> car des installations plus rapides peuvent r\u00e9duire le temps de CI.<\/li>\n<li>Non&nbsp;: soit <code>uv<\/code>, Conda ou Poetry peut fonctionner selon le projet.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Quelle est l&rsquo;importance de la compatibilit\u00e9 multiplateforme&nbsp;?<\/p>\n<ul>\n<li>\u00c9lev\u00e9&nbsp;: utilisez <code>uv<\/code> lorsqu&rsquo;un fichier de verrouillage universel r\u00e9pond \u00e0 vos besoins.<\/li>\n<li>Mod\u00e9r\u00e9&nbsp;: Conda peut bien fonctionner, en particulier sur les syst\u00e8mes de recherche de type Unix.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>Pour la plupart des nouveaux projets de recherche, <code>uv<\/code> est une valeur par d\u00e9faut solide lorsque vous avez besoin de rapidit\u00e9 et de reproductibilit\u00e9. Pour les projets HPC ou les workflows avec des d\u00e9pendances non Python, associez Conda \u00e0 la conteneurisation.<\/p>\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>La gestion des d\u00e9pendances en Python scientifique n&rsquo;est pas facultative. Il s&rsquo;agit d&rsquo;une base de recherche reproductible.<\/p>\n<p>Les points les plus importants sont :<\/p>\n<ol>\n<li>Les fichiers de verrouillage sont essentiels. \u00c9pinglez les versions exactes et suivez-les dans Git.<\/li>\n<li><code>uv<\/code> est une option moderne forte pour les environnements rapides et reproductibles.<\/li>\n<li>Conda reste vital pour les piles scientifiques avec des d\u00e9pendances non python.<\/li>\n<li>PEP 751 vise \u00e0 unifier les formats de fichier de verrouillage via <code>pylock.toml<\/code>.<\/li>\n<li>Un README avec des instructions d&rsquo;installation claires est la documentation minimale dont chaque projet a besoin.<\/li>\n<\/ol>\n<p>Commencez par auditer les projets en cours. V\u00e9rifiez si les environnements sont document\u00e9s et que les d\u00e9pendances sont \u00e9pingl\u00e9es. Convertissez un projet pour utiliser un fichier de verrouillage. Le co\u00fbt initial est payant lorsque vous ou un autre chercheur devez r\u00e9ex\u00e9cuter la simulation des mois ou des ann\u00e9es plus tard en toute confiance.<\/p>\n<h2>Guides connexes<\/h2>\n<ul>\n<li><a href=\"https:\/\/matforge.org\/reproducible-research-workflows-docker-and-conda-for-simulation-projects\/\">Flows de recherche reproductibles&nbsp;: Docker et Conda pour les projets de simulation<\/a> &#8211; D\u00e9couvrez comment Docker et Conda se compl\u00e8tent pour la reproductibilit\u00e9 de la simulation.<\/li>\n<li><a href=\"https:\/\/matforge.org\/unit-testing-scientific-code-pytest-strategies-research-projects\/\">Tests unitaires pour le code scientifique&nbsp;: strat\u00e9gies PyTest pour des projets de recherche<\/a> \u2014 mod\u00e8les de CI pour les pipelines de simulation reproductibles.<\/li>\n<li><a href=\"https:\/\/matforge.org\/gpu-acceleration-for-fipy-simulations-cupy-and-numba-integration-guide\/\">Acc\u00e9l\u00e9ration GPU pour les simulations FIPY&nbsp;: cupy et numba Guide d&rsquo;int\u00e9gration<\/a> \u2014 G\u00e9rez les d\u00e9pendances GPU avec Pypi et Conda.<\/li>\n<li><a href=\"https:\/\/matforge.org\/working-through-your-first-fipy-example\/\">Travailler dans votre premier exemple FIPY<\/a> &#8211; commencez par un projet FIPY g\u00e9r\u00e9 par la d\u00e9pendance.<\/li>\n<\/ul>\n<h2>R\u00e9f\u00e9rences et lectures compl\u00e9mentaires<\/h2>\n<ul>\n<li><a href=\"https:\/\/docs.astral.sh\/uv\/\">Documentation UV<\/a> \u2014 Guide officiel du gestionnaire de paquets bas\u00e9 sur la rouille.<\/li>\n<li><a href=\"https:\/\/peps.python.org\/pep-0751\/\">PEP 751&nbsp;: sp\u00e9cification pylock.toml<\/a> \u2014 Proposition de format de fichier de verrouillage standardis\u00e9.<\/li>\n<li><a href=\"https:\/\/book.the-turing-way.org\/reproducible-research\/overview\/overview-definitions\/\">La voie de Turing&nbsp;: d\u00e9finitions de recherche reproductibles<\/a> \u2014 Normes communautaires pour les flux de travail reproductibles.<\/li>\n<li><a href=\"https:\/\/lincolnloop.github.io\/python-package-manager-shootout\/\">Python Package Manager Shootout<\/a> \u2014 Benchmarks comparant les UV, la po\u00e9sie, les PIP-Tools, le PDM et le Pixi.<\/li>\n<li><a href=\"https:\/\/wagtail.org\/blog\/uv-overtakes-poetry\/\">Balogne&nbsp;: UV d\u00e9passe la po\u00e9sie<\/a> \u2014 Signal d&rsquo;adoption de l&rsquo;industrie.<\/li>\n<\/ul>\n","protected":false,"raw":"<p>La gestion des d\u00e9pendances en python scientifique est l'une des parties les plus importantes de la recherche reproductible. Une simulation peut \u00e9chouer des mois plus tard, car les versions des packages ont chang\u00e9, un interpr\u00e9teur Python d\u00e9cal\u00e9 ou une biblioth\u00e8que num\u00e9rique mise \u00e0 jour d'une mani\u00e8re qui affecte les r\u00e9sultats.<\/p>\n<p>Ce guide explique comment les fichiers de verrouillage, les environnements et les gestionnaires de paquets modernes aident les chercheurs \u00e0 conserver des flux de travail scientifiques Python reproductibles, portables et plus faciles \u00e0 entretenir.<\/p>\n<h2>Points \u00e0 retenir cl\u00e9s<\/h2>\n<ul>\n<li>Les fichiers de verrouillage sont l'une des \u00e9tapes les plus percutantes pour les flux de travail Scientific Python reproductibles.<\/li>\n<li><code>uv<\/code> est un gestionnaire de paquets moderne et rapide et est de plus en plus utilis\u00e9 comme alternative au PIP, aux outils PIP et \u00e0 la po\u00e9sie.<\/li>\n<li>PEP 751 introduit un format de fichier de verrouillage standardis\u00e9, <code>pylock.toml<\/code>, pour r\u00e9duire la fragmentation de l'outil.<\/li>\n<li>Conda reste important pour les projets scientifiques Python avec des d\u00e9pendances non-Python telles que C, C++, MPI, HDF5 et CUDA.<\/li>\n<li>Votre choix d'outil doit correspondre \u00e0 votre flux de travail&nbsp;: <code>uv<\/code> pour la rapidit\u00e9 et la reproductibilit\u00e9, Conda pour les piles scientifiques et HPC et la po\u00e9sie pour les pipelines de publication matures.<\/li>\n<\/ul>\n<h2>Le mode de d\u00e9faillance cach\u00e9e en Python scientifique<\/h2>\n<p>Chaque chercheur en informatique scientifique voit finalement le m\u00eame probl\u00e8me. Une simulation a fonctionn\u00e9 le mois dernier, mais elle \u00e9choue d\u00e9sormais avec une incompatibilit\u00e9 de version. Pire, il peut encore fonctionner mais produire des r\u00e9sultats subtilement diff\u00e9rents.<\/p>\n<p>Ce n'est pas seulement un inconv\u00e9nient. C'est un \u00e9chec de reproductibilit\u00e9. L'environnement de calcul a chang\u00e9, y compris les versions de package, les interpr\u00e9teurs Python ou les d\u00e9pendances de niveau inf\u00e9rieur. Votre code est cass\u00e9 ou produit en silence des r\u00e9sultats qui ne sont plus \u00e9quivalents \u00e0 l'ex\u00e9cution d'origine.<\/p>\n<p>La cause profonde est g\u00e9n\u00e9ralement des d\u00e9pendances non \u00e9pingl\u00e9es. M\u00eame lorsque le code est contr\u00f4l\u00e9 en version, le travail reste li\u00e9 \u00e0 une machine sp\u00e9cifique et \u00e0 un moment donn\u00e9 si l'environnement n'est pas reproductible.<\/p>\n<p>Le python scientifique rend ce probl\u00e8me particuli\u00e8rement grave. Contrairement \u00e0 de nombreux projets Web, le calcul scientifique d\u00e9pend souvent de cha\u00eenes complexes de biblioth\u00e8ques num\u00e9riques, de packages compil\u00e9s et de constructions sensibles au mat\u00e9riel. NumPy, Scipy, Fipy, HDF5, MPI, OpenBlas et les versions sp\u00e9cifiques de Python doivent fonctionner ensemble.<\/p>\n<p>La solution consiste \u00e0 g\u00e9rer d\u00e9lib\u00e9r\u00e9ment les d\u00e9pendances. Utilisez des fichiers de verrouillage pour geler les versions exactes, suivre les environnements dans le contr\u00f4le de version et documenter la fa\u00e7on dont l'environnement doit \u00eatre recr\u00e9\u00e9.<\/p>\n<h2>Qu'est-ce qu'un fichier de verrouillage&nbsp;?<\/h2>\n<p>Un fichier de verrouillage est un instantan\u00e9 de l'environnement logiciel exact d'un projet. Il enregistre les versions sp\u00e9cifiques de toutes les d\u00e9pendances, y compris les sous-d\u00e9pendances, qui ont \u00e9t\u00e9 install\u00e9es lors de la derni\u00e8re configuration du projet.<\/p>\n<p>Consid\u00e9rez-le comme une recette congel\u00e9e pour la configuration de votre logiciel. Tout le monde peut recr\u00e9er le m\u00eame environnement plus tard, m\u00eame si les versions de packages ont chang\u00e9 en amont.<\/p>\n<h3>sans fichiers de verrouillage<\/h3>\n<pre><code class=\"language-bash\"># requirements.txt without a lockfile\nnumpy&gt;=1.25.0\nscipy&gt;=1.11.0\nfipy&gt;=4.3.0\n\n# On another machine or after a month:\npip install -r requirements.txt\n\n# This might install newer versions:\n# numpy 1.26.x, scipy 1.12.x, or different dependency builds\n<\/code><\/pre>\n<p>Ce type de configuration permet aux versions de package de changer. Le code peut toujours s'ex\u00e9cuter, mais le comportement num\u00e9rique, la pr\u00e9cision, le comportement du solveur ou les internes de d\u00e9pendance peuvent changer.<\/p>\n<h3>avec des fichiers de verrouillage<\/h3>\n<pre><code class=\"language-bash\"># uv.lock or another lockfile records exact resolved versions\n\nuv sync\n\n# Anyone who runs the sync command gets the same resolved environment\n<\/code><\/pre>\n<p>Cela est important pour les projets de simulation, car les biblioth\u00e8ques num\u00e9riques peuvent modifier les chemins de code entre les versions. Le comportement \u00e0 virgule flottante peut diff\u00e9rer entre les builds. Les solveurs PDE et les cadres scientifiques peuvent \u00e9galement se comporter diff\u00e9remment d'une version \u00e0 l'autre.<\/p>\n<p>Un fichier de verrouillage r\u00e9duit cette incertitude en rendant l'installation d\u00e9terministe.<\/p>\n<h2>Le paysage de la gestion des d\u00e9pendances Python<\/h2>\n<p>L'\u00e9cosyst\u00e8me Python dispose de plusieurs options pratiques de gestion des d\u00e9pendances. Chaque outil a des atouts diff\u00e9rents, et le bon choix d\u00e9pend de la question de savoir si le projet est pur Python, ax\u00e9 sur HPC, orient\u00e9 package ou construit pour la reproductibilit\u00e9 \u00e0 long terme.<\/p>\n<h3>UV : l'option rapide moderne<\/h3>\n<p><code>uv<\/code> est un gestionnaire de packages bas\u00e9 sur la rouille construit par Astral. Il vise \u00e0 remplacer plusieurs outils Python courants, notamment PIP, PIP-Tools, PIPX, PYENV et VirtualEnv, par un seul flux de travail rapide.<\/p>\n<p>Les chercheurs passent \u00e0 <code>uv<\/code> pour plusieurs raisons&nbsp;:<\/p>\n<ol>\n<li>vitesse. <code>uv<\/code> peut installer des packages beaucoup plus rapidement que les flux de travail traditionnels bas\u00e9s sur PIP, en particulier avec la mise en cache.<\/li>\n<li>Fichier de verrouillage universel. Un seul <code>uv.lock<\/code> peut prendre en charge les installations reproductibles sur toutes les plates-formes.<\/li>\n<li>Compatibilit\u00e9 PIP. Les commandes telles que <code>uv pip install<\/code> facilitent la migration.<\/li>\n<li>Gestion des versions Python. <code>uv<\/code> peut installer et g\u00e9rer des interpr\u00e9teurs Python, ce qui r\u00e9duit le besoin d'outils distincts.<\/li>\n<li>Installation autonome. <code>uv<\/code> n'exige pas que Python soit install\u00e9 en premier.<\/li>\n<\/ol>\n<p>Utilisez <code>uv<\/code> pour de nouveaux projets o\u00f9 la vitesse, la reproductibilit\u00e9 et la simple migration de PIP Matter.<\/p>\n<p>Il est particuli\u00e8rement utile pour :<\/p>\n<ul>\n<li>Nouveaux projets de simulation.<\/li>\n<li>Pipelines CI\/CD o\u00f9 l'heure d'installation est importante.<\/li>\n<li>Les projets qui ont besoin de gestion des d\u00e9pendances et de gestion des versions Python.<\/li>\n<li>Les \u00e9quipes migrent depuis PIP ou PIP-Tools.<\/li>\n<\/ul>\n<h4>Flux de travail UV de base<\/h4>\n<pre><code class=\"language-bash\"># Install uv\ncurl -LsSf https:\/\/astral.sh\/uv\/install.sh | sh\n\n# Create a new project with Python 3.11\nuv init my-simulation --python 3.11\ncd my-simulation\n\n# Add dependencies\nuv add numpy scipy fipy\n\n# Generate a lockfile\nuv lock\n\n# Sync to install from the lockfile\nuv sync\n<\/code><\/pre>\n<p>Le principal compromis est que la po\u00e9sie a encore des flux de travail de publication m\u00fbrs et une gestion avanc\u00e9e des groupes de d\u00e9pendances. Si vous maintenez un package scientifique Python pour Pypi, la po\u00e9sie peut toujours \u00eatre attrayante.<\/p>\n<h3>Po\u00e9sie : le chef de projet \u00e9tabli<\/h3>\n<p>La po\u00e9sie est un outil complet de gestion de projet. Il g\u00e8re la r\u00e9solution de d\u00e9pendances, les environnements virtuels, la cr\u00e9ation de packages et la publication sur Pypi.<\/p>\n<p>Les chercheurs choisissent toujours la po\u00e9sie pour plusieurs raisons :<\/p>\n<ol>\n<li>groupes de d\u00e9pendances. La po\u00e9sie peut s\u00e9parer proprement le d\u00e9veloppement, les tests, la documentation et les d\u00e9pendances CI.<\/li>\n<li>Publication du workflow. Il dispose d'un support int\u00e9gr\u00e9 pour la cr\u00e9ation et la publication de packages.<\/li>\n<li>\u00c9cosyst\u00e8me m\u00fbr. La po\u00e9sie a des ann\u00e9es d'utilisation de la production, une documentation approfondie et une grande communaut\u00e9.<\/li>\n<\/ol>\n<p>Utilisez de la po\u00e9sie lorsque&nbsp;:<\/p>\n<ul>\n<li>Vous publiez un package Python sur Pypi.<\/li>\n<li>Vous avez besoin d'une gestion des groupes de d\u00e9pendances \u00e0 maturit\u00e9<\/li>\n<li>Votre \u00e9quipe valorise une longue exp\u00e9rience et une documentation \u00e9tablie.<\/li>\n<\/ul>\n<p>Le compromis est la vitesse. La po\u00e9sie peut prendre plus de <code>uv<\/code> pour les installations froides, la g\u00e9n\u00e9ration de fichiers de verrouillage et les ajouts de packages. Pour les petits projets, cela n'a peut-\u00eatre pas d'importance. Pour les grands projets et les pipelines CI, la diff\u00e9rence peut devenir perceptible.<\/p>\n<h3>Conda : la base scientifique<\/h3>\n<p>Conda reste l'un des outils les plus importants pour Python scientifique, en particulier lorsque le projet a besoin de d\u00e9pendances non-Python.<\/p>\n<p>Conda est utile pour la recherche car il peut g\u00e9rer les packages Python, les packages R, les biblioth\u00e8ques compil\u00e9es, les compilateurs, les MPI, HDF5, CUDA et d'autres d\u00e9pendances au niveau du syst\u00e8me dans un seul environnement.<\/p>\n<p>Conda est important lorsque :<\/p>\n<ul>\n<li>Vous avez besoin de d\u00e9pendances non-Python telles que C, C++, MPI, HDF5, FFTW ou CUDA.<\/li>\n<li>Vous ciblez les clusters HPC.<\/li>\n<li>Vos biblioth\u00e8ques scientifiques d\u00e9pendent du code C ou Fortran compil\u00e9.<\/li>\n<li>Vous travaillez \u00e0 travers Python et R.<\/li>\n<\/ul>\n<p>Le compromis est que Conda peut \u00eatre plus lent que <code>uv<\/code> pour la r\u00e9solution de d\u00e9pendance pure-python et peut ne pas produire facilement des fichiers de verrouillage multi-plateformes universels.<\/p>\n<h4>Flux de travail Conda de base<\/h4>\n<pre><code class=\"language-bash\"># Create environment\nconda create -n my-sim python=3.11\nconda activate my-sim\n\n# Install packages, including non-Python dependencies\nconda install numpy scipy hdf5 openmpi\n\n# Export to environment file\nconda env export --no-builds | grep -v \"prefix:\" &gt; environment.yml\n\n# Restore the environment\nconda env create -f environment.yml\n<\/code><\/pre>\n<h3>PIP-Tools : l'option minimaliste<\/h3>\n<p><code>pip-tools<\/code> Comble les flux de travail et les fichiers de verrouillage PIP traditionnels. Il est l\u00e9ger et reste proche de l'interface PIP.<\/p>\n<p>Utilisez les outils PIP lorsque&nbsp;:<\/p>\n<ul>\n<li>Vous voulez une approche simple.<\/li>\n<li>Vous migrez \u00e0 partir de PIP et ne souhaitez pas apprendre un outil plus grand.<\/li>\n<li>Votre projet est petit et n'a pas besoin de groupes de d\u00e9pendances avanc\u00e9s.<\/li>\n<\/ul>\n<p>Le compromis est que PIP-Tools peut g\u00e9n\u00e9rer des fichiers de sortie sp\u00e9cifiques \u00e0 la plate-forme. Il est \u00e9galement moins complet que la po\u00e9sie ou <code>uv<\/code>.<\/p>\n<h2>PEP 751 : L'avenir des lockfiles<\/h2>\n<p>PEP 751 propose un format de fichier standardis\u00e9 pour l'enregistrement des d\u00e9pendances Python afin que les environnements puissent \u00eatre install\u00e9s de mani\u00e8re reproductible. Ce format est appel\u00e9 <code>pylock.toml<\/code>.<\/p>\n<h3>Ce que \u00e7a r\u00e9sout<\/h3>\n<p>Les outils de d\u00e9pendance Python ont toujours utilis\u00e9 diff\u00e9rents formats de fichier de verrouillage. PDM, PIP Freeze, PIP-Tools, Poetry et <code>uv<\/code> Tous les environnements approchent le verrouillage diff\u00e9remment.<\/p>\n<p>Cela cr\u00e9e plusieurs probl\u00e8mes :<\/p>\n<ul>\n<li>Verrouillage du fournisseur. Il peut \u00eatre difficile de basculer entre les outils.<\/li>\n<li>Fragmentation des outils. Les scanners de s\u00e9curit\u00e9 et les outils d'automatisation peuvent prendre en charge uniquement certains formats.<\/li>\n<li>difficult\u00e9 d'audit. Diff\u00e9rents formats ont une syntaxe et des conventions diff\u00e9rentes.<\/li>\n<\/ul>\n<p>PEP 751 propose <code>pylock.toml<\/code> comme format standardis\u00e9.<\/p>\n<h3>Pourquoi c'est important pour le python scientifique<\/h3>\n<p>Le format propos\u00e9 est utile pour la recherche car il s'agit de :<\/p>\n<ul>\n<li>Lisible par l'homme, en utilisant TOML.<\/li>\n<li>g\u00e9n\u00e9r\u00e9s par la machine, afin que les outils puissent \u00e9crire une sortie coh\u00e9rente.<\/li>\n<li>Consommable par des outils non Python.<\/li>\n<li>S\u00e9curisez par la conception, avec des hachages cryptographiques pour la protection de la cha\u00eene d'approvisionnement.<\/li>\n<li>Assez flexible pour repr\u00e9senter plusieurs environnements ou groupes de d\u00e9pendance.<\/li>\n<\/ul>\n<p>Une fois largement adopt\u00e9, <code>pylock.toml<\/code> peut r\u00e9duire le besoin de formats de fichier de verrouillage sp\u00e9cifiques \u00e0 l'outil. Pour les chercheurs, cela signifie une meilleure interop\u00e9rabilit\u00e9. Un fichier de verrouillage peut \u00eatre consomm\u00e9 par n'importe quel outil conforme et audit\u00e9 plus facilement par des services externes.<\/p>\n<h2>Le spectre de reproductibilit\u00e9<\/h2>\n<p>La reproductibilit\u00e9 est un spectre. Le bon niveau d\u00e9pend du risque, de la dur\u00e9e du projet et des exigences de publication.<\/p>\n<table class=\"custom-table\">\n<tbody><tr>\n<th>Niveau<\/th>\n<th>Approche<\/th>\n<th>Co\u00fbt<\/th>\n<th>reproductibilit\u00e9<\/th>\n<th>le mieux pour<\/th>\n<\/tr>\n<tr>\n<td>Bon<\/td>\n<td>D\u00e9pendances de documents dans Readme<\/td>\n<td>Minimale<\/td>\n<td>V\u00e9rification manuelle<\/td>\n<td>Scripts et tutoriels rapides<\/td>\n<\/tr>\n<tr>\n<td>Mieux<\/td>\n<td>Fichier d'environnement tel que <code>requirements.txt<\/code> ou <code>environment.yml<\/code><\/td>\n<td>Faible<\/td>\n<td>Installation automatis\u00e9e<\/td>\n<td>Projets et collaborateurs partag\u00e9s<\/td>\n<\/tr>\n<tr>\n<td>Meilleur<\/td>\n<td>LockFile Plus Environnement contr\u00f4l\u00e9 par la version<\/td>\n<td>Mod\u00e9rer<\/td>\n<td>reproduction exacte<\/td>\n<td>Publications et archives \u00e0 long terme<\/td>\n<\/tr>\n<tr>\n<td>Maximum<\/td>\n<td>Containerisation avec Docker ou Singularit\u00e9<\/td>\n<td>Haut<\/td>\n<td>Forte isolation<\/td>\n<td>HPC et flux de travail publi\u00e9s<\/td>\n<\/tr>\n<\/tbody><\/table>\n<p>Pour les projets de recherche, le minimum est de fixer des versions exactes dans <code>requirements.txt<\/code> ou <code>environment.yml<\/code>. L'approche recommand\u00e9e consiste \u00e0 utiliser <code>uv lock<\/code> ou \u00e0 l'exportation Conda pour g\u00e9n\u00e9rer un fichier d'environnement reproductible. La meilleure pratique consiste \u00e0 suivre ce fichier dans Git et \u00e0 documenter comment recr\u00e9er l'environnement dans le fichier README.<\/p>\n<h2>Flux de travail pratiques pour des projets scientifiques<\/h2>\n<h3>Workflow&nbsp;1&nbsp;: nouveau projet de simulation avec UV<\/h3>\n<pre><code class=\"language-bash\"># Initialize project\nuv init my-simulation --python 3.11\ncd my-simulation\n\n# Add core dependencies\nuv add numpy scipy matplotlib\n\n# Add scientific libraries\nuv add fipy mpmath\n\n# Generate lockfile\nuv lock\n\n# Add dev dependencies\nuv add --group dev pytest black ruff\n\n# Commit everything\ngit add pyproject.toml uv.lock\ngit commit -m \"Initial project structure with pinned dependencies\"\n<\/code><\/pre>\n<p>Cela fonctionne parce que le fichier <code>uv.lock<\/code> est valid\u00e9 dans Git. Toute personne clonant le r\u00e9f\u00e9rentiel et en cours d'ex\u00e9cution <code>uv sync<\/code> obtient les m\u00eames versions r\u00e9solues.<\/p>\n<h3>Workflow 2 : Projet HPC avec Conda et Singularit\u00e9<\/h3>\n<pre><code class=\"language-bash\"># On your workstation\nconda create -n hpc-sim python=3.11\nconda activate hpc-sim\nconda install numpy scipy hdf5 openmpi\n\n# Export environment\nconda env export --no-builds | grep -v \"prefix:\" &gt; environment.yml\n\n# Build Singularity image from Docker\ndocker build -t my-sim:latest .\nsingularity build my-sim.sif docker:\/\/my-sim:latest\n\n# Transfer to HPC cluster\nscp my-sim.sif hpc-cluster:\/scratch\/\n<\/code><\/pre>\n<p>Cela fonctionne parce que Conda g\u00e8re les d\u00e9pendances sur le poste de travail, tandis que Singularity fournit une conteneurisation compatible HPC. Le fichier <code>environment.yml<\/code> peut \u00eatre contr\u00f4l\u00e9 en version et recr\u00e9\u00e9 sur un autre syst\u00e8me.<\/p>\n<h3>Flux de travail&nbsp;3&nbsp;: migration du PIP vers les UV<\/h3>\n<pre><code class=\"language-bash\"># Start with existing requirements.txt\npip install uv\n\n# Replace pip with uv for installs\nuv pip install -r requirements.txt\n\n# Generate a uv lockfile\nuv lock\n\n# From now on, use uv sync instead of pip install\nuv sync\n<\/code><\/pre>\n<p>Ce chemin de migration est simple car <code>uv<\/code> est compatible avec de nombreux flux de travail de style PIP. Le fichier <code>uv.lock<\/code> devient la source unique de v\u00e9rit\u00e9 pour l'environnement.<\/p>\n<h2>erreurs courantes et comment les \u00e9viter<\/h2>\n<h3>Erreur&nbsp;1&nbsp;: Utilisation des d\u00e9pendances non \u00e9pingl\u00e9es<\/h3>\n<pre><code class=\"language-python\"># WRONG: Allows automatic updates\nnumpy&gt;=1.0\nscipy&gt;=1.0\n\n# RIGHT: Pin exact versions\nnumpy==1.26.4\nscipy==1.11.4\n<\/code><\/pre>\n<p>Les modifications de version mineures peuvent modifier le comportement num\u00e9rique, les crit\u00e8res de convergence ou la pr\u00e9cision \u00e0 virgule flottante. \u00c9pinglez les versions exactes lorsque la reproductibilit\u00e9 est importante.<\/p>\n<h3>Erreur&nbsp;2&nbsp;: Ne valider aucun fichier de verrouillage<\/h3>\n<p>Si votre r\u00e9f\u00e9rentiel contient <code>pyproject.toml<\/code> mais pas de fichier de verrouillage, votre projet n'est pas enti\u00e8rement reproductible. Un fichier de verrouillage est l'exigence minimale pour les constructions d\u00e9terministes.<\/p>\n<p>G\u00e9n\u00e9rez un fichier de verrouillage et validez-le&nbsp;:<\/p>\n<pre><code class=\"language-bash\">uv lock  # or conda export\ngit add uv.lock  # or environment.yml\ngit commit -m \"Add lockfile for reproducible environment\"\n<\/code><\/pre>\n<h3>Erreur&nbsp;3&nbsp;: ignorer les sous-d\u00e9pendances<\/h3>\n<p>M\u00eame si vous \u00e9pinglez des packages de niveau sup\u00e9rieur, les sous-d\u00e9pendances peuvent toujours changer de comportement.<\/p>\n<pre><code class=\"language-python\"># If you pin fipy but not its dependencies:\n# numpy, mpmath, and other packages may upgrade independently\n<\/code><\/pre>\n<p>Utilisez un outil qui r\u00e9sout et \u00e9pingle l'arbre de d\u00e9pendances complet, tel que <code>uv<\/code>, Conda ou Po\u00e9sie.<\/p>\n<h3>Erreur&nbsp;4&nbsp;: environnements sp\u00e9cifiques \u00e0 la plate-forme<\/h3>\n<p>Certains outils peuvent g\u00e9n\u00e9rer une sortie sp\u00e9cifique \u00e0 la plate-forme. Si vous d\u00e9veloppez sur macOS mais que vous d\u00e9ployez sous Linux, les fichiers d'environnement peuvent \u00e9chouer ou r\u00e9soudre diff\u00e9remment.<\/p>\n<p>Utilisez des outils qui prennent en charge les fichiers de verrouillage multi-plateformes ou g\u00e9n\u00e9rez des fichiers de verrouillage sur la plate-forme cible.<\/p>\n<h3>Erreur&nbsp;5&nbsp;: D\u00e9pendances de donn\u00e9es externes<\/h3>\n<p>Si une simulation d\u00e9pend d'API ou de bases de donn\u00e9es externes qui changent, la reproductibilit\u00e9 peut s'arr\u00eater m\u00eame lorsque l'environnement Python est verrouill\u00e9.<\/p>\n<p>Snapshot Donn\u00e9es externes lorsque cela est possible. Si cela n'est pas possible, utilisez des points de terminaison d'API versionn\u00e9s et documentez la version exacte ou la date d'acc\u00e8s.<\/p>\n<h2>Ce que nous recommandons : un cadre de d\u00e9cision<\/h2>\n<p>Utilisez ce cadre de d\u00e9cision lors du choix d'un outil de gestion de la d\u00e9pendance pour un projet scientifique Python.<\/p>\n<ol>\n<li>\n<p>Avez-vous besoin de d\u00e9pendances non-Python telles que C, C++, MPI, CUDA, HDF5 ou FFTW&nbsp;?<\/p>\n<ul>\n<li>Oui&nbsp;: utilisez Conda ou utilisez Conda \u00e0 l'int\u00e9rieur de Docker ou Singularit\u00e9.<\/li>\n<li>Non : passez \u00e0 la question suivante.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Publiez-vous un package Python sur Pypi&nbsp;?<\/p>\n<ul>\n<li>Oui&nbsp;: envisagez la po\u00e9sie pour les flux de travail d'\u00e9dition matures ou <code>uv<\/code> pour la vitesse.<\/li>\n<li>Non : passez \u00e0 la question suivante.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Travaillez-vous dans des pipelines CI\/CD&nbsp;?<\/p>\n<ul>\n<li>Oui&nbsp;: utilisez <code>uv<\/code> car des installations plus rapides peuvent r\u00e9duire le temps de CI.<\/li>\n<li>Non&nbsp;: soit <code>uv<\/code>, Conda ou Poetry peut fonctionner selon le projet.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Quelle est l'importance de la compatibilit\u00e9 multiplateforme&nbsp;?<\/p>\n<ul>\n<li>\u00c9lev\u00e9&nbsp;: utilisez <code>uv<\/code> lorsqu'un fichier de verrouillage universel r\u00e9pond \u00e0 vos besoins.<\/li>\n<li>Mod\u00e9r\u00e9&nbsp;: Conda peut bien fonctionner, en particulier sur les syst\u00e8mes de recherche de type Unix.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>Pour la plupart des nouveaux projets de recherche, <code>uv<\/code> est une valeur par d\u00e9faut solide lorsque vous avez besoin de rapidit\u00e9 et de reproductibilit\u00e9. Pour les projets HPC ou les workflows avec des d\u00e9pendances non Python, associez Conda \u00e0 la conteneurisation.<\/p>\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>La gestion des d\u00e9pendances en Python scientifique n'est pas facultative. Il s'agit d'une base de recherche reproductible.<\/p>\n<p>Les points les plus importants sont :<\/p>\n<ol>\n<li>Les fichiers de verrouillage sont essentiels. \u00c9pinglez les versions exactes et suivez-les dans Git.<\/li>\n<li><code>uv<\/code> est une option moderne forte pour les environnements rapides et reproductibles.<\/li>\n<li>Conda reste vital pour les piles scientifiques avec des d\u00e9pendances non python.<\/li>\n<li>PEP 751 vise \u00e0 unifier les formats de fichier de verrouillage via <code>pylock.toml<\/code>.<\/li>\n<li>Un README avec des instructions d'installation claires est la documentation minimale dont chaque projet a besoin.<\/li>\n<\/ol>\n<p>Commencez par auditer les projets en cours. V\u00e9rifiez si les environnements sont document\u00e9s et que les d\u00e9pendances sont \u00e9pingl\u00e9es. Convertissez un projet pour utiliser un fichier de verrouillage. Le co\u00fbt initial est payant lorsque vous ou un autre chercheur devez r\u00e9ex\u00e9cuter la simulation des mois ou des ann\u00e9es plus tard en toute confiance.<\/p>\n<h2>Guides connexes<\/h2>\n<ul>\n<li><a href=\"https:\/\/matforge.org\/reproducible-research-workflows-docker-and-conda-for-simulation-projects\/\">Flows de recherche reproductibles&nbsp;: Docker et Conda pour les projets de simulation<\/a> - D\u00e9couvrez comment Docker et Conda se compl\u00e8tent pour la reproductibilit\u00e9 de la simulation.<\/li>\n<li><a href=\"https:\/\/matforge.org\/unit-testing-scientific-code-pytest-strategies-research-projects\/\">Tests unitaires pour le code scientifique&nbsp;: strat\u00e9gies PyTest pour des projets de recherche<\/a> \u2014 mod\u00e8les de CI pour les pipelines de simulation reproductibles.<\/li>\n<li><a href=\"https:\/\/matforge.org\/gpu-acceleration-for-fipy-simulations-cupy-and-numba-integration-guide\/\">Acc\u00e9l\u00e9ration GPU pour les simulations FIPY&nbsp;: cupy et numba Guide d'int\u00e9gration<\/a> \u2014 G\u00e9rez les d\u00e9pendances GPU avec Pypi et Conda.<\/li>\n<li><a href=\"https:\/\/matforge.org\/working-through-your-first-fipy-example\/\">Travailler dans votre premier exemple FIPY<\/a> - commencez par un projet FIPY g\u00e9r\u00e9 par la d\u00e9pendance.<\/li>\n<\/ul>\n<h2>R\u00e9f\u00e9rences et lectures compl\u00e9mentaires<\/h2>\n<ul>\n<li><a href=\"https:\/\/docs.astral.sh\/uv\/\">Documentation UV<\/a> \u2014 Guide officiel du gestionnaire de paquets bas\u00e9 sur la rouille.<\/li>\n<li><a href=\"https:\/\/peps.python.org\/pep-0751\/\">PEP 751&nbsp;: sp\u00e9cification pylock.toml<\/a> \u2014 Proposition de format de fichier de verrouillage standardis\u00e9.<\/li>\n<li><a href=\"https:\/\/book.the-turing-way.org\/reproducible-research\/overview\/overview-definitions\/\">La voie de Turing&nbsp;: d\u00e9finitions de recherche reproductibles<\/a> \u2014 Normes communautaires pour les flux de travail reproductibles.<\/li>\n<li><a href=\"https:\/\/lincolnloop.github.io\/python-package-manager-shootout\/\">Python Package Manager Shootout<\/a> \u2014 Benchmarks comparant les UV, la po\u00e9sie, les PIP-Tools, le PDM et le Pixi.<\/li>\n<li><a href=\"https:\/\/wagtail.org\/blog\/uv-overtakes-poetry\/\">Balogne&nbsp;: UV d\u00e9passe la po\u00e9sie<\/a> \u2014 Signal d'adoption de l'industrie.<\/li>\n<\/ul>\n"},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 10<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>La gestion des d\u00e9pendances en python scientifique est l&rsquo;une des parties les plus importantes de la recherche reproductible. Une simulation peut \u00e9chouer des mois plus tard, car les versions des packages ont chang\u00e9, un interpr\u00e9teur Python d\u00e9cal\u00e9 ou une biblioth\u00e8que num\u00e9rique mise \u00e0 jour d&rsquo;une mani\u00e8re qui affecte les r\u00e9sultats. Ce guide explique comment les [&hellip;]<\/p>\n","protected":false,"raw":""},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"fr_FR","_original_post":"https:\/\/matforge.org\/?p=391","iawp_total_views":0,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1245","post","type-post","status-publish","format-standard","hentry","category-simulation-modeling-projects","fr-FR"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Gestion des d\u00e9pendances en Python scientifique<\/title>\n<meta name=\"description\" content=\"Apprenez \u00e0 g\u00e9rer les d\u00e9pendances Python scientifiques avec Lockfiles, UV, Conda, Poetry, Environments et Reproductible Workflows.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/matforge.org\/fr\/managing-dependencies-scientific-python-lockfiles-environments\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gestion des d\u00e9pendances en Python scientifique\" \/>\n<meta property=\"og:description\" content=\"Apprenez \u00e0 g\u00e9rer les d\u00e9pendances Python scientifiques avec Lockfiles, UV, Conda, Poetry, Environments et Reproductible Workflows.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/fr\/managing-dependencies-scientific-python-lockfiles-environments\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-21T14:28:33+00:00\" \/>\n<meta name=\"author\" content=\"Elena Markovska\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Elena Markovska\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/managing-dependencies-scientific-python-lockfiles-environments\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/managing-dependencies-scientific-python-lockfiles-environments\\\/\"},\"author\":{\"name\":\"Elena Markovska\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/980162bb5de46742daece973661d93da\"},\"headline\":\"G\u00e9rer les d\u00e9pendances en Python scientifique : fichiers de verrouillage, environnements et reproductibilit\u00e9\",\"datePublished\":\"2026-08-21T14:28:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/managing-dependencies-scientific-python-lockfiles-environments\\\/\"},\"wordCount\":2805,\"commentCount\":0,\"articleSection\":[\"Simulation &amp; Projets de mod\u00e9lisation\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/fr\\\/managing-dependencies-scientific-python-lockfiles-environments\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/managing-dependencies-scientific-python-lockfiles-environments\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/fr\\\/managing-dependencies-scientific-python-lockfiles-environments\\\/\",\"name\":\"Gestion des d\u00e9pendances en Python scientifique\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-08-21T14:28:33+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/980162bb5de46742daece973661d93da\"},\"description\":\"Apprenez \u00e0 g\u00e9rer les d\u00e9pendances Python scientifiques avec Lockfiles, UV, Conda, Poetry, Environments et Reproductible Workflows.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/managing-dependencies-scientific-python-lockfiles-environments\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/fr\\\/managing-dependencies-scientific-python-lockfiles-environments\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/managing-dependencies-scientific-python-lockfiles-environments\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"G\u00e9rer les d\u00e9pendances en Python scientifique : fichiers de verrouillage, environnements et reproductibilit\u00e9\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\",\"url\":\"https:\\\/\\\/matforge.org\\\/\",\"name\":\"matforge.org\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/matforge.org\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/980162bb5de46742daece973661d93da\",\"name\":\"Elena Markovska\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2de4e35b6581d7d8a839335156c6b5834cfaa0aef537a1c837e882dc57eea1e7?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2de4e35b6581d7d8a839335156c6b5834cfaa0aef537a1c837e882dc57eea1e7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2de4e35b6581d7d8a839335156c6b5834cfaa0aef537a1c837e882dc57eea1e7?s=96&d=mm&r=g\",\"caption\":\"Elena Markovska\"},\"sameAs\":[\"http:\\\/\\\/matforge.org\"],\"url\":\"https:\\\/\\\/matforge.org\\\/author\\\/elena-markovska\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Gestion des d\u00e9pendances en Python scientifique","description":"Apprenez \u00e0 g\u00e9rer les d\u00e9pendances Python scientifiques avec Lockfiles, UV, Conda, Poetry, Environments et Reproductible Workflows.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/matforge.org\/fr\/managing-dependencies-scientific-python-lockfiles-environments\/","og_locale":"fr_FR","og_type":"article","og_title":"Gestion des d\u00e9pendances en Python scientifique","og_description":"Apprenez \u00e0 g\u00e9rer les d\u00e9pendances Python scientifiques avec Lockfiles, UV, Conda, Poetry, Environments et Reproductible Workflows.","og_url":"https:\/\/matforge.org\/fr\/managing-dependencies-scientific-python-lockfiles-environments\/","og_site_name":"matforge.org","article_published_time":"2026-08-21T14:28:33+00:00","author":"Elena Markovska","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Elena Markovska","Dur\u00e9e de lecture estim\u00e9e":"16 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/fr\/managing-dependencies-scientific-python-lockfiles-environments\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/fr\/managing-dependencies-scientific-python-lockfiles-environments\/"},"author":{"name":"Elena Markovska","@id":"https:\/\/matforge.org\/#\/schema\/person\/980162bb5de46742daece973661d93da"},"headline":"G\u00e9rer les d\u00e9pendances en Python scientifique : fichiers de verrouillage, environnements et reproductibilit\u00e9","datePublished":"2026-08-21T14:28:33+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/fr\/managing-dependencies-scientific-python-lockfiles-environments\/"},"wordCount":2805,"commentCount":0,"articleSection":["Simulation &amp; Projets de mod\u00e9lisation"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/fr\/managing-dependencies-scientific-python-lockfiles-environments\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/fr\/managing-dependencies-scientific-python-lockfiles-environments\/","url":"https:\/\/matforge.org\/fr\/managing-dependencies-scientific-python-lockfiles-environments\/","name":"Gestion des d\u00e9pendances en Python scientifique","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-08-21T14:28:33+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/980162bb5de46742daece973661d93da"},"description":"Apprenez \u00e0 g\u00e9rer les d\u00e9pendances Python scientifiques avec Lockfiles, UV, Conda, Poetry, Environments et Reproductible Workflows.","breadcrumb":{"@id":"https:\/\/matforge.org\/fr\/managing-dependencies-scientific-python-lockfiles-environments\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/fr\/managing-dependencies-scientific-python-lockfiles-environments\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/fr\/managing-dependencies-scientific-python-lockfiles-environments\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/"},{"@type":"ListItem","position":2,"name":"G\u00e9rer les d\u00e9pendances en Python scientifique : fichiers de verrouillage, environnements et reproductibilit\u00e9"}]},{"@type":"WebSite","@id":"https:\/\/matforge.org\/#website","url":"https:\/\/matforge.org\/","name":"matforge.org","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/matforge.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/matforge.org\/#\/schema\/person\/980162bb5de46742daece973661d93da","name":"Elena Markovska","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/2de4e35b6581d7d8a839335156c6b5834cfaa0aef537a1c837e882dc57eea1e7?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2de4e35b6581d7d8a839335156c6b5834cfaa0aef537a1c837e882dc57eea1e7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2de4e35b6581d7d8a839335156c6b5834cfaa0aef537a1c837e882dc57eea1e7?s=96&d=mm&r=g","caption":"Elena Markovska"},"sameAs":["http:\/\/matforge.org"],"url":"https:\/\/matforge.org\/author\/elena-markovska\/"}]}},"_links":{"self":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1245","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/comments?post=1245"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1245\/revisions"}],"predecessor-version":[{"id":1345,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1245\/revisions\/1345"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=1245"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=1245"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=1245"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}