(pixi + npm) au lieu de (conda + pip + npm)
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 pixi
à 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
pixi 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
pas tout à fait ça...
en pratique on n’obtient ce comportement qu’après avoir aussi installé direnv;
mais bon c’est l’idée générale tout de même
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 !
pixi utilise uv pour remplacer pip
sous le capot, pixi utilise uv, un outil spécifique à Python; il s’agit d’un
gestionnaire de librairies 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
pixi
on installe
on vérifie pixi (tous OS)
comme d’hab: n’oubliez pas de relancer un nouveau terminal
pixi --versiondirenv
à quoi ça sert ?
un autre inconvénient avec conda, c’est la nécessité de faire explicitement le
conda activate qui va bien; c’est un peu lourd, et on peut facilement oublier de le faire !
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)
on installe direnv
on vérifie direnv (tous OS)
comme d’hab: n’oubliez pas de relancer un nouveau terminal
direnv --versionun exemple de projet avec pixi
sans direnv
mkdir monprojetcd monprojet
# recommended: initialize pixi with conda-forge channelpixi init --channel conda-forge
# install python-3.14 and node-24pixi add python=3.14 nodejs=24
# add numpy as a Python requirementpixi add numpy
# if you need to add a package with 'extras' quantifier# you need to use this form - it's safer with quotes aroundpixi add --pypi 'fastapi[standard]'
# add a node dependency - here lodash as an examplepixi add lodash
# see our requirementspixi list --explicit
# now, without direnv, we have two ways to invoke the "right" python and node# 1. via 'pixi run'pixi run python --versionpixi run node --version
# 2. via 'pixi shell' to enter a subshell with the right versions# the first line will apparently do nothing# this is because it creates a subshell (a shell within the current shell)pixi shellpython --versionnode --version# and when we exit this subshell we are back to the first oneexitavec direnv
le début est le même, mais en configurant direnv on peut faire en sorte que
l’activation des bonnes versions soit automatique à chaque fois qu’on entre dans
le dossier du projet !
mkdir monprojetcd monprojet
# recommended: initialize pixi with conda-forge channelpixi init --channel conda-forge
# select python-3.14 and node-24pixi add python=3.14 nodejs=24
# add numpy as a Python requirementpixi add numpy
# if you need to add a package with 'extras' quantifier# you need to use this form - it's safer with quotes aroundpixi add --pypi 'fastapi[standard]'
# add a node dependency - here lodash as an examplepixi add lodash
# see our requirementspixi list --explicit
# configure direnvcat > .envrc << 'EOF'watch_file pixi.lockeval "$(pixi shell-hook)"EOF
# Allow direnv to load this .envrcdirenv allow
# et là tout baignepython --versionpython -c "import numpy; print(numpy.__version__)"le 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
références
- la doc de
pixi - et notamment la page pixi sur l’intégration avec direnv
- ainsi que la page pixi sur l’extension
direnvdans vs-code
influences
voyez aussi ces différents outils qui ont certains comportements avec ceux-ci
uvqui est utilisé en sous-main parpixipour la gestion des dépendances Pythonnpmpour 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)