Setup uv TD info

De WikiBR

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.

  1. 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