.. _clase_16: ================= Clase 16: ``uv`` ================= ------ Hasta ahora hemos utilizado ``conda`` para manejar las dependencias de un código de Python. ``conda`` es una aplicación que permite crear *ambientes*, esto es, colecciones de módulos interdependientes en conjunto con una versión de Python en particular. En los últimos años han aparecido otras aplicaciones que permiten manejar dependencias *por proyecto*. Esto es algo habitual en otros lenguajes, pero ha comenzado a ganar popularidad en Python. Herramientas como ``poetry`` o ``uv`` permiten instalar módulos para un proyecto particular que reside en un determinado directorio. Otra de las ventajas que ofrecen estas nuevas aplicaciones es su velocidad: en su creación se ha puesto el foco en que la carga de dependencias sea rápida y consistente. Para instalar ``uv``, pueden referirse `a la documentación `__. Creando proyectos ================= Para crear un proyecto con ``uv`` hacemos .. code:: sh uv init uv-demo donde ``uv-demo`` es el nombre del proyecto. En este caso ``uv`` crea un directorio denominado ``uv-demo`` con varios archivos en él: - ``README.md``: el readme del proyecto - ``hello.py``: Una plantilla mínima de código - ``pyproject.toml``: Un archivo de configuración del proyecto - ``.python-version``: La versión de python que está asociada al proyecto. Cómo corremos entonces ``hello.py``? Por lo pronto, la versión de python que se usará es aquella que venimos usando hasta ahora, que es la del ambiente que instalamos con ``conda``. Sin embargo, ``uv`` permite crear ambientes virtuales asociados al proyecto con: .. code:: sh uv venv --python=python3.13 donde con la opción ``--python`` indicamos qué versión de Python queremos utilizar. Para activar este entorno particular de nuestro proyecto hacemos: :: source .venv/bin/activate o en Windows .. code:: sh .venv\Scripts\activate y corremos python en forma habitual. Para desactivar el entorno, :: deactivate Corriendo con ``uv run`` ------------------------ Podemos también correr el código con :: uv run hello.py En este caso, ``uv`` utilizará la versión de python de acuerdo al siguiente orden de prioridades: - Instalaciones de python incluidas en la variable del sistema UV_PYTHON_INSTALL_DIR. - Un interprete de Python en el PATH tales como python, python3, o python3.x en macOS y Linux, o python.exe en Windows. - Si existe el archivo ``.python-version``, utilizará esa versión de Python. Si la versión de python no existe, creará un ambiente virtual en el directorio ``.venv`` con esa versión. Atención: ``uv`` ejecutará el código con el intérprete de Python que verifique las condiciones de la variable ``require-python`` en ``pyproject.toml``. Si no encontrara una versión adecuada, dará un error y sugerirá las acciones correspondientes. Entonces: - ``.python-version`` → Define qué intérprete se usa - ``requires-python`` en ``pyproject.toml`` → Define qué versiones son compatibles con tu código Agregando dependencias ---------------------- Para agregar dependencias al proyecto, usamos ``uv add`` .. code:: sh uv add matplotlib pandas Y notaremos que se agregan los módulos en las dependencias del proyecto en ``pyproject.toml``. ``uv`` es más eficiente y veloz al manejar las dependencias. Pruébelo Ud. mismo. Para agregar dependencias, también se puede editar el archivo ``pyproject.toml``, en la variable ``[dependencies]`` Existen diferentes formas de especificar requisitos de versión: - ``>=3.10``: Python 3.10 o superior - ``>=3.10,<3.12``: Python 3.10 o 3.11, pero no 3.12 - ``==3.10``: Exactamente Python 3.10 - ``~=3.10``: Compatible con Python 3.10.x (cualquier versión menor)