Setup uv TD info
Gérer son stockage sur les ordis des labos
C'est un des problèmes les plus communs de l'X que de se retrouver avec une erreur du genre Disk quota exceeded (os error 122)
.
Ce qu'il se passe c'est qu'il y a 30Go partagés par tous les ordis des salles de TP, donc si vous mettez un fichier dans ~/foo/bar
vous allez le retrouver dans tous les autres ordis, c'est notamment le cas du dossier .ssh
et le dossier .config
. Cependant sur chaque ordi est présent un /Data
de très grande taille ou tout le monde peut travailler.
Pour résoudre le problème de manque de place plusieurs étapes
Identifier ce qui prend de la place
du -hc ~/ 2>/dev/null | grep -E 'f^([0-9]|,|\.)+G'
Cette commande permet de savoir ce qui fait au moins un giga dans ses dossiers.
Si c'est pip qui prend trop de place on peut exécuter
pip cache purge
pour nettoyer un peu tout ces vieux paquets dont on ne se sert plus.
Mais plus puissant que pip est uv
.
uv
Introduction
uv est un "extremely fast Python package and project manager, written in Rust." (source leur doc) Il permet de gérer plusieurs versions de python, plusieurs versions des paquets, des environnements de dev, de prod, le tout en étant incomparablement plus rapide que vanilla pip ou que poetry... Bref je [l'auteur de ce tuto, ndlr] suis fan.
Installation de uv
Pour installer UV :
curl -LsSf https://astral.sh/uv/install.sh | sh
C'est tout
Initialisation d'un projet avec uv
Pour initialiser un nouveau projet avec uv, suivez ces étapes :
mkdir projet-de-ouf cd projet-de-ouf uv init
uv s'occupe des conflits de dépendances, de l'installation des paquets, de la gestion du venv, le tout avec le pyproject.toml
qui est son fichier de configuration, qu'il gère automatiquement.
Ajout d'un paquet au venv
Oubliez pip install faites place à uv add
, par exemple pour ajouter PyTorch
uv add torch
Pour vérifier qu'il a bien été ajouté au projet vous pouvez consulter le pyproject.toml
et voir que le paquet à bien été ajouté avec la bonne version.
Attention : le venv n'est pas créé jusqu'à ce que vous demandiez à uv d'exécuter quelque chose comme le hello.py qu'il crée automatiquement ou juste python
uv run python uv run python hello.py
Mais pas besoin de créer le venv pour configurer tous les paquets
Changement de la version de python
uv créé automatiquement un .python-version
dans lequel il suppose la version de python qui vous intéresse, si vous voulez la changer, vous pouvez le faire dans ce fichier. Attention cependant à modifier conjointement le pyproject.toml
pour les dépendances et bien préciser que les versions des paquets doivent être compatibles avec toutes les versions de python à partir de 3.8 si vous voulez, même si la version de python est 3.12.
Execution d'un programme
Pour exécuter un programme qui s'appelle hello.py
par exemple
uv run python hello.py
Si le venv n'a pas été créé avant c'est maintenant que uv va le créer et installer les paquets avec les versions spécifiées dans le pyproject.toml
Attention
La commande uv pip install
existe encore mais ne rajoute pas le paquet au venv elle va l'installer, mais vous ne saurez pas quelle version, cette commande est donc à remplacer par uv add
Gestion du cache
Un des atouts de uv est qu'il a une très bonne gestion du cache, pour que l'installation de paquets donc vous avez souvent besoin soit plus rapide. Seul bémol cela peut remplir votre ~/.cache
. Si vous voulez nettoyer le cache vous pouvez exécuter uv cache purge
ce qui est un peu agressif, ou lire la documentation de uv sur le cache.
Vous pouvez aussi installer un paquet sans le 'cacher' avec
uv add torch --no-cache
Voire même en lui spécifiant le dossier de cache que vous voulez utiliser (cf la doc de uv)
Utilisation du venv dans vscode
Une fois que uv a créé le venv vous pouvez l'utiliser comme un venv normal avec vscode en précisant le chemin de votre venv s'il n'est pas dans votre dossier de travail.
uv et git
Quand on exécute la commande uv init
il crée aussi un repo git. Profitez-en !! Apprenez à utiliser git pour ne pas perdre votre travail, à chaque itération et comparer ce que vous avez fait à chaque modification.
Lancement de jupyter avec uv - execution de code à distance
Pour les personnes qui ont tellement streamliné leur processus de développement avec un environement de dev sur leur machine mais un serveur jupyter distant pour exécuter le code.
ssh -L localhost:8888:localhost:8888 prenom.nom@thon.polytechnique.fr cd foo/bar uv init uv add jupyter uv run jupyter notebook --no-browser --port=8888 & disown %1
[1]
Copier la ligne du genre http://localhost:8888/tree?token=36b32207109218c28fec0772a8471b320ec2177a27443e2f qui vient d'apparaître et dans vscode cliquer sur Select kernel -> Existing jupyter server
coller ce que vous venez de copier, dans la prochaine case nommez votre serveur (par exemple "thon v1"), et sélectionner kernel python. Le tour est joué, votre code est sauvé sur votre machine mais exécuté à distance sur thon. Si la dsi éteint l'ordi pendant les vacances alors vous aurez encore tout votre code.
Pour tuer le serveur vous pouvez récupérer le PID de votre processus et le tuer avec
kill $(jobs -l | cut -d ' ' -f 2)
ou alors le tuer avec pkill uv
mais vous allez aussi tuer les processus des autres ce qui est pas cool, donc évitez svp
Attention : pensez à régulièrement synchroniser votre pyproject.toml (avec git par exemple) pour que les versions que vous ajoutez sur votre dossier local (sur votre ordinateur) soit les mêmes que celles que fait tourner uv sur l'ordi du labo.
- ↑ une variante est de rajouter -fN à la fin de la commande ssh pour avoir le tunnel ssh en arrière plan et se connecter en ssh simplement après, mais si ce commentaire vous semble du charabia oubliez le