(mise + uv) au lieu de (conda + pip)
propos
est-ce que conda c’est le top ?
conda existe depuis très longtemps; c’est un avantage car il est très utilisé
et donc bien connu, et relativement stable également
toutefois son âge commence à se faire sentir, et le développeur exigeant peut avoir
envie d’utiliser des outils plus modernes qui auraient moins d’inconvénients
quels inconvénients me direz-vous ? le principal est sans aucun doute la lenteur !
la création d’un environnement virtuel avec conda est une opération très lourde,
du coup on prend facilement l’habitude .. de le faire le moins possible; or il
se trouve qu’il existe à présent des alternatives beaucoup plus efficaces
pour cela, et c’est le but ici
et pip alors ?
c’est un peu la même histoire avec pip, il existe aujourd’hui des
alternatives qui rendent en gros le même service, mais qui sont beaucoup plus efficaces
remplacer conda par mise
à quoi nous sert conda finalement ?
essentiellement pour ce qui nous concerne, on s’en sert pour créer des
environnements virtuels dans lesquels on peut mettre, par exemple python-3.13,
ou node-24
mise est un outil écrit en Rust, très rapide et moderne, qui permet de gérer
les versions d’outils et de langages de programmation. Il remplace
avantageusement conda pour installer différentes versions des langages de
développement les plus répandus.
la logique consiste à pouvoir dire par exemple
dans le dossier
/un/dossier(et ses descendants), si je tapepythonça veut dire la version 3.14 et si je tapenodeça veut dire la version 24
et bien sûr on peut faire ça dans autant de dossiers qu’on veut
de cette façon, il suffit de changer de dossier pour changer de version !
pas tout à fait ça
direnv; mais bon
c’est l’idée générale tout de même et uv pour remplacer pip ?
uv quant à lui est spécifique à Python, il s’agit d’un gestionnaire de paquets
Python ultra-rapide, écrit également en Rust; il offre une alternative beaucoup
plus efficace à pip tout en restant compatible avec l’écosystème Python
existant
essentiellement uv va créer un environnement virtuel qui est associé, lui
aussi, au dossier courant
pour les installer
mise
on installe
- installer le runtime Visual C++
Terminal window # download the installercurl -L -O https://aka.ms/vc14/vc_redist.x64.exe# execute the installer./vc_redist.x64.exe - installer mise
Terminal window winget install jdx.mise - activer au démarrage du terminal
par défautmisene supporte pas le combobash+Windows, on va l’aider un peuTerminal window curl -k https://intro.info-mines.paris/code/setup-mise.sh | bash
- installer
Terminal window curl https://mise.run | sh - activer au démarrage du terminal
Terminal window curl -k https://intro.info-mines.paris/code/setup-mise.sh | bash
- installer
Terminal window curl https://mise.run | sh - activer au démarrage du terminal
Terminal window curl -k https://intro.info-mines.paris/code/setup-mise.sh | bash
on vérifie mise (tous OS)
comme d’hab: n’oubliez pas de relancer un nouveau terminal
mise --versionuv
on installe
on vérifie uv (tous OS)
comme d’hab: n’oubliez pas de relancer un nouveau terminal
uv --versionun exemple
<tl;dr>
voyez la version longue ci-dessous, mais pour faire court:
mkdir monprojetcd monprojet
mise use python@3.14uv inituv add numpy
source .venv/bin/activate
# et là tout baignepython --versionpython -c "import numpy; print(numpy.__version__)"choisir ses versions: `mise use`
mise use
mise va
- automatiquement installer les différents langages si besoin; il va les télécharger s’ils ne sont pas déjà sur la machine
- créer un fichier
mise.tomlpour mémoriser ça
# on déclare qu'on a besoin de python-3.14mise use python@3.14# ce serait pareil pour nodemise use node@24pour voir où on en est
# optionnel: confirmer qu'on a bien maintenant la bonne versionpython --version# pour confirmernode --version# cette commande est très intéressante pour lister les différentes versions# déjà connues, et quelle sont celles en vigueur dans ce dossiermise ls# ou encore pour un langae donnémise ls pythonles dépendances: `uv add`
uv add
au moins une fois il faut faire ceci; qui va - entre autres - créer le fichier
pyproject.toml pour y ranger notamment les dépendances Python
uv inità quoi sert pyproject.toml ?
bon à savoir, ce fichier est également central pour le “packaging” de votre
projet Python, donc c’est tout bénéf:)
notamment, puisque vous avez besoin de numpy, c’est sans doute qu’il faudra
l’installer aussi pour les gens qui voudront ensuite utiliser votre code; autant
ranger cette information quelque part…
une fois que c’est fait, avec la phrase suivante on va:
- downloader les librairies, toujours si nécessaire i.e. seulement la première fois
- les ajouter dans
pyproject.toml
# déclarer les dépendancesuv add numpy pandas matplotlibque mettre dans le repo git ?
avec git
à ce stade il est recommandé de mettre dans le repo git:
mise.tomlpyproject.toml
et pour l'utiliser ?
mise install + uv sync
de cette façon, si quelqu’un clone le repo git, voici comment il pourra mettre en place son environnement de dév:
git clone ..../monprojet.gitcd monprojet
# pour installer localement le bon pythonmise install# pour créer le venv avec les dépendancesuv sync
# ne pas oublier d'activersource .venv/bin/activate
# et là on a installé numpyle prompt
comme avec conda, il est crucial d’avoir un prompt qui indique l’environnement
actif; si nécessaire
voyez ici la section sur le prompt starship
si vous voulez creuser
activate automatique ?
un autre inconvénient avec conda, c’est la nécessité de faire explicitement le
conda activate qui va bien, comme on l’a vu avec uv cette contrainte persiste
il existe une alternative, direnv, qui permet d’automatiser l’activation de
l’environnement; ça demande un peu de setup initial, mais le retour sur
investissement est rapide !
l’idée consiste à faire en sorte que l’activation soit déclenchée par un simple
changement de dossier courant (un cd, quoi)
auto-activate avec direnv
- installer
direnvTerminal window # macOSbrew install direnv# Linux (Debian/Ubuntu)sudo apt install direnv# Windows (avec scoop)winget install direnv.direnv - dans chaque projet où vous voulez l’utiliser, créer un fichier
.envrcavec le contenu suivantTerminal window echo 'eval "$(mise hook direnv)"' > .envrc - puis, toujours dans chaque projet
Terminal window direnv allow
config globale / projets imbriqués ?
pour définir le comportement de la commande python en dehors des espaces
mise, l’idée de faire un mise use dans son homedir n’est pas la bonne
idée (voir les détails sordides ci-dessous)
au contraire il faut faire plus simplement
mise use -g python@3.14Attention aux espaces imbriqués !
avec git on peut facilement imbriquer les repos; pour savoir dans quel repo on
est, git remonte dans le filesystem et s’arrête dès qu’il a trouvé un dossier
.git
on pourrait être tenté de faire la même chose avec mise, mais malheureusement
mise ne fonctionne pas comme ça !
en pratique ça signifie qu’il faut configurer ses espaces mise comme des
dossiers séparés, et ne pas en inclure un sous un autre
références
influences
voyez aussi ces différents outils qui ont certains comportements avec ceux-ci
npmpour l’idée d’installer les dépendances tout en les mémorisant danspackage.jsonvenvqui est utilisé en sous-main paruvpour les environnements virtuels Python (et qui n’existait pas à l’époque deconda)