Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
Filter by Categories
About Article
Analyze Data
Archive
Best Practices
Better Outputs
Blog
Code Optimization
Code Quality
Command Line
Daily tips
Dashboard
Data Analysis & Manipulation
Data Engineer
Data Visualization
DataFrame
Delta Lake
DevOps
DuckDB
Environment Management
Feature Engineer
Git
Jupyter Notebook
LLM
LLM
Machine Learning
Machine Learning
Machine Learning & AI
Manage Data
MLOps
Natural Language Processing
NumPy
Pandas
Polars
PySpark
Python Tips
Python Utilities
Python Utilities
Scrape Data
SQL
Testing
Time Series
Tools
Visualization
Visualization & Reporting
Workflow & Automation
Workflow Automation

UV: Unify pipx, poetry, and pyenv Into One Tool

Table of Contents

UV: Unify pipx, poetry, and pyenv Into One Tool

Motivation

Managing Python tools, project dependencies, and Python versions traditionally requires multiple specialized tools: pipx for isolated tool installations, poetry for dependency management, and pyenv for Python version control.

Switching between multiple Python versions and managing tool installations across different environments can be cumbersome. Consider this typical workflow:

# Install global tools with pipx
pipx install black

# Install Python versions with pyenv
pyenv install 3.9.18

# Set local Python version
pyenv local 3.11.8

# Initialize Poetry project
poetry init

# Add dependencies with Poetry
poetry add pandas

This process requires maintaining multiple tools, each with its own commands and configurations, leading to complexity and potential conflicts.

Understanding Traditional Tools

pipx

pipx is a tool for installing and running Python applications in isolated environments. It’s designed to:

  • Install Python applications globally while keeping them isolated
  • Prevent dependency conflicts between different tools

Example of pipx usage:

# Install a tool
pipx install black
​
# Run a tool without installing
pipx run pytest tests/

Poetry

Poetry is a dependency management and packaging tool that:

  • Manages project dependencies through pyproject.toml
  • Handles virtual environment creation
  • Provides build and publish functionality

Example of Poetry usage:

# pyproject.toml
[tool.poetry]
name = "myproject"
version = "0.1.0"
description = ""
​
[tool.poetry.dependencies]
python = "^3.8"
pandas = "^2.0.0"
# Install dependencies
poetry install
​
# Add new dependency
poetry add requests
​
# Run script in poetry environment
poetry run python script.py

pyenv

pyenv is a Python version manager that:

  • Installs multiple Python versions
  • Switches between Python versions per project or globally
  • Manages virtual environments

Example of pyenv usage:

# List available Python versions
pyenv install --list
​
# Install specific version
pyenv install 3.11.0
​
# Set global Python version
pyenv global 3.11.0
​
# Set local Python version
pyenv local 3.10.0

Introduction to UV

UV is a high-performance Python package manager written in Rust that consolidates multiple Python tools into a single, efficient solution. It replaces pipx, poetry, and pyenv while offering significant performance improvements.

Installation:

# On macOS and Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# On Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Unified Tool Management

UV simplifies Python tool and version management through:

Managing Python versions (replacing pyenv):

# Install multiple Python versions
uv python install 3.10 3.11 3.12

# Use specific Python version
uv venv --python 3.11.0

Installing and running tools (replacing pipx):

# Install a tool globally
uv tool install ruff

# Run a tool without installing
uv tool run black myfile.py

Managing project dependencies (replacing poetry):

# Initialize a new project
uv init myproject
cd myproject

# Add dependencies
uv add pandas

# Remove dependencies
uv remove pandas

# Create lockfile
uv lock

Conclusion

UV represents a significant advancement in Python tooling management by providing a unified, fast, and efficient solution. Its ability to replace multiple specialized tools while maintaining compatibility with existing workflows makes it an excellent choice for Python developers and data professionals.

Link to UV

Want the full walkthrough?

Check out our in-depth guide on Why uv Might Be All You Need

Leave a Comment

Your email address will not be published. Required fields are marked *

0
    0
    Your Cart
    Your cart is empty
    Scroll to Top

    Work with Khuyen Tran

    Work with Khuyen Tran