Skip to content

Improve section 1.2 of the course #19

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Aug 7, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 60 additions & 0 deletions GEMINI.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Python Version

This projects uses Python 3.11

# Style Guide

Respect the following markdownlint rules:

- **[MD001](https://github.com/DavidAnson/markdownlint/blob/main/doc/md001.md)** _heading-increment_ - Heading levels should only increment by one level at a time
- **[MD003](https://github.com/DavidAnson/markdownlint/blob/main/doc/md003.md)** _heading-style_ - Heading style
- **[MD004](https://github.com/DavidAnson/markdownlint/blob/main/doc/md004.md)** _ul-style_ - Unordered list style
- **[MD005](https://github.com/DavidAnson/markdownlint/blob/main/doc/md005.md)** _list-indent_ - Inconsistent indentation for list items at the same level
- **[MD007](https://github.com/DavidAnson/markdownlint/blob/main/doc/md007.md)** _ul-indent_ - Unordered list indentation
- **[MD009](https://github.com/DavidAnson/markdownlint/blob/main/doc/md009.md)** _no-trailing-spaces_ - Trailing spaces
- **[MD010](https://github.com/DavidAnson/markdownlint/blob/main/doc/md010.md)** _no-hard-tabs_ - Hard tabs
- **[MD011](https://github.com/DavidAnson/markdownlint/blob/main/doc/md011.md)** _no-reversed-links_ - Reversed link syntax
- **[MD012](https://github.com/DavidAnson/markdownlint/blob/main/doc/md012.md)** _no-multiple-blanks_ - Multiple consecutive blank lines
- **[MD013](https://github.com/DavidAnson/markdownlint/blob/main/doc/md013.md)** _line-length_ - Line length
- **[MD014](https://github.com/DavidAnson/markdownlint/blob/main/doc/md014.md)** _commands-show-output_ - Dollar signs used before commands without showing output
- **[MD018](https://github.com/DavidAnson/markdownlint/blob/main/doc/md018.md)** _no-missing-space-atx_ - No space after hash on atx style heading
- **[MD019](https://github.com/DavidAnson/markdownlint/blob/main/doc/md019.md)** _no-multiple-space-atx_ - Multiple spaces after hash on atx style heading
- **[MD020](https://github.com/DavidAnson/markdownlint/blob/main/doc/md020.md)** _no-missing-space-closed-atx_ - No space inside hashes on closed atx style heading
- **[MD021](https://github.com/DavidAnson/markdownlint/blob/main/doc/md021.md)** _no-multiple-space-closed-atx_ - Multiple spaces inside hashes on closed atx style heading
- **[MD022](https://github.com/DavidAnson/markdownlint/blob/main/doc/md022.md)** _blanks-around-headings_ - Headings should be surrounded by blank lines
- **[MD023](https://github.com/DavidAnson/markdownlint/blob/main/doc/md023.md)** _heading-start-left_ - Headings must start at the beginning of the line
- **[MD024](https://github.com/DavidAnson/markdownlint/blob/main/doc/md024.md)** _no-duplicate-heading_ - Multiple headings with the same content
- **[MD025](https://github.com/DavidAnson/markdownlint/blob/main/doc/md025.md)** _single-title/single-h1_ - Multiple top-level headings in the same document
- **[MD026](https://github.com/DavidAnson/markdownlint/blob/main/doc/md026.md)** _no-trailing-punctuation_ - Trailing punctuation in heading
- **[MD027](https://github.com/DavidAnson/markdownlint/blob/main/doc/md027.md)** _no-multiple-space-blockquote_ - Multiple spaces after blockquote symbol
- **[MD028](https://github.com/DavidAnson/markdownlint/blob/main/doc/md028.md)** _no-blanks-blockquote_ - Blank line inside blockquote
- **[MD029](https://github.com/DavidAnson/markdownlint/blob/main/doc/md029.md)** _ol-prefix_ - Ordered list item prefix
- **[MD030](https://github.com/DavidAnson/markdownlint/blob/main/doc/md030.md)** _list-marker-space_ - Spaces after list markers
- **[MD031](https://github.com/DavidAnson/markdownlint/blob/main/doc/md031.md)** _blanks-around-fences_ - Fenced code blocks should be surrounded by blank lines
- **[MD032](https://github.com/DavidAnson/markdownlint/blob/main/doc/md032.md)** _blanks-around-lists_ - Lists should be surrounded by blank lines
- **[MD033](https://github.com/DavidAnson/markdownlint/blob/main/doc/md033.md)** _no-inline-html_ - Inline HTML
- **[MD034](https://github.com/DavidAnson/markdownlint/blob/main/doc/md034.md)** _no-bare-urls_ - Bare URL used
- **[MD035](https://github.com/DavidAnson/markdownlint/blob/main/doc/md035.md)** _hr-style_ - Horizontal rule style
- **[MD036](https://github.com/DavidAnson/markdownlint/blob/main/doc/md036.md)** _no-emphasis-as-heading_ - Emphasis used instead of a heading
- **[MD037](https://github.com/DavidAnson/markdownlint/blob/main/doc/md037.md)** _no-space-in-emphasis_ - Spaces inside emphasis markers
- **[MD038](https://github.com/DavidAnson/markdownlint/blob/main/doc/md038.md)** _no-space-in-code_ - Spaces inside code span elements
- **[MD039](https://github.com/DavidAnson/markdownlint/blob/main/doc/md039.md)** _no-space-in-links_ - Spaces inside link text
- **[MD040](https://github.com/DavidAnson/markdownlint/blob/main/doc/md040.md)** _fenced-code-language_ - Fenced code blocks should have a language specified
- **[MD041](https://github.com/DavidAnson/markdownlint/blob/main/doc/md041.md)** _first-line-heading/first-line-h1_ - First line in a file should be a top-level heading
- **[MD042](https://github.com/DavidAnson/markdownlint/blob/main/doc/md042.md)** _no-empty-links_ - No empty links
- **[MD043](https://github.com/DavidAnson/markdownlint/blob/main/doc/md043.md)** _required-headings_ - Required heading structure
- **[MD044](https://github.com/DavidAnson/markdownlint/blob/main/doc/md044.md)** _proper-names_ - Proper names should have the correct capitalization
- **[MD045](https://github.com/DavidAnson/markdownlint/blob/main/doc/md045.md)** _no-alt-text_ - Images should have alternate text (alt text)
- **[MD046](https://github.com/DavidAnson/markdownlint/blob/main/doc/md046.md)** _code-block-style_ - Code block style
- **[MD047](https://github.com/DavidAnson/markdownlint/blob/main/doc/md047.md)** _single-trailing-newline_ - Files should end with a single newline character
- **[MD048](https://github.com/DavidAnson/markdownlint/blob/main/doc/md048.md)** _code-fence-style_ - Code fence style
- **[MD049](https://github.com/DavidAnson/markdownlint/blob/main/doc/md049.md)** _emphasis-style_ - Emphasis style
- **[MD050](https://github.com/DavidAnson/markdownlint/blob/main/doc/md050.md)** _strong-style_ - Strong style
- **[MD051](https://github.com/DavidAnson/markdownlint/blob/main/doc/md051.md)** _link-fragments_ - Link fragments should be valid
- **[MD052](https://github.com/DavidAnson/markdownlint/blob/main/doc/md052.md)** _reference-links-images_ - Reference links and images should use a label that is defined
- **[MD053](https://github.com/DavidAnson/markdownlint/blob/main/doc/md053.md)** _link-image-reference-definitions_ - Link and image reference definitions should be needed
- **[MD054](https://github.com/DavidAnson/markdownlint/blob/main/doc/md054.md)** _link-image-style_ - Link and image style
- **[MD055](https://github.com/DavidAnson/markdownlint/blob/main/doc/md055.md)** _table-pipe-style_ - Table pipe style
- **[MD056](https://github.com/DavidAnson/markdownlint/blob/main/doc/md056.md)** _table-column-count_ - Table column count
- **[MD058](https://github.com/DavidAnson/markdownlint/blob/main/doc/md058.md)** _blanks-around-tables_ - Tables should be surrounded by blank lines
- **[MD059](https://github.com/DavidAnson/markdownlint/blob/main/doc/md059.md)** _descriptive-link-text_ - Link text should be descriptive
176 changes: 89 additions & 87 deletions docs/1. Initializing/1.2. uv.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,23 @@
description: Discover uv, a fast and versatile Python package manager and project manager designed to streamline your development workflow. Learn how to install it and use it as a drop-in replacement for pip, venv, pipx, and pyenv.
---

# 1.2. uv
# 1.2. uv ⚡️

## What is uv?
## 🤔 What is uv?

[uv](https://docs.astral.sh/uv/) is an extremely fast Python package installer and resolver, written in Rust, designed to be a drop-in replacement for `pip`, `pipx`, `venv`, and `pyenv`. Created by [Astral](https://astral.sh/), the same team behind the high-performance linter [Ruff](https://docs.astral.sh/ruff/), `uv` aims to significantly speed up and simplify Python project management. It offers a unified toolchain that handles virtual environments, dependency resolution, package installation, and more, all while providing exceptional performance.
[uv](https://docs.astral.sh/uv/) is an extremely fast Python package installer and resolver, written in Rust. It's designed as a drop-in replacement for `pip`, `pip-tools`, `pipx`, `venv`, and `virtualenv`, with `pyenv` support coming soon. Created by [Astral](https://astral.sh/), the same team behind the high-performance linter [Ruff](https://docs.astral.sh/ruff/), `uv` aims to significantly speed up and simplify Python project management. It offers a unified toolchain that handles virtual environments, dependency resolution, package installation, and more, all while providing exceptional performance.

## Why should you use uv?
## 🚀 Why should you use uv?

`uv` offers several compelling advantages for Python developers, especially in the context of MLOps:
`uv` offers several compelling advantages for Python developers, especially in the context of MLOps.

| Feature | `uv` | `pip`, `venv`, `pipx`, etc. |
| ----------------------- | ---------------------------------- | --------------------------------------- |
| **Speed** | Blazing fast (written in Rust) | Slower (written in Python) |
| **Tooling** | Unified (all-in-one tool) | Fragmented (multiple tools) |
| **Dependency Resolution** | Advanced, high-performance resolver | Basic, can be slow for complex cases |
| **Caching** | Aggressive and efficient | Less effective |
| **Disk Space** | Efficient, uses less space | Can be bloated |

- **Performance**: `uv` is incredibly fast, often outperforming `pip`, `venv`, and `pyenv` by a significant margin. This speed translates to faster project setup, quicker dependency resolution, and reduced wait times during development and deployment.
- **Unified Toolchain**: `uv` replaces multiple tools, simplifying your development workflow. It can manage virtual environments, install packages, and resolve dependencies, all within a single command-line interface.
Expand All @@ -19,7 +27,15 @@ description: Discover uv, a fast and versatile Python package manager and projec
- **Cross-Platform Compatibility**: `uv` works seamlessly across Linux, macOS, and Windows, ensuring a consistent experience regardless of your operating system.
- **Caching**: `uv` implements aggressive caching mechanisms to avoid redundant work, further speeding up operations like package installation and environment setup.

## How to install uv?
### 💡 MLOps Benefits

In MLOps, reproducibility and speed are critical. `uv` helps on both fronts:

- **Faster CI/CD Pipelines**: By speeding up dependency installation, `uv` can significantly reduce the time your CI/CD pipelines take to run.
- **Consistent Environments**: `uv`'s fast and reliable dependency resolution ensures that you can create consistent and reproducible environments for your machine learning models.
- **Simplified Dependency Management**: No more juggling multiple tools. `uv` simplifies your `pyproject.toml` or `requirements.txt` management.

## 📦 How to install uv?

[Installing `uv` is straightforward](https://docs.astral.sh/uv/getting-started/installation/). The recommended method is to use the official installation script, which automatically detects your operating system and installs the appropriate version:

Expand All @@ -41,119 +57,105 @@ Once installed, verify the installation by checking the version:
uv --version
```

## How to use uv as a drop-in replacement for pip?
## 🥧 How to use uv as a drop-in replacement for pip?

`uv` can be used as a direct replacement for many common `pip` commands. Here's how:

- **Installing packages**:

```bash
uv pip install requests numpy pandas
```

```bash
uv pip install requests numpy pandas
```
- **Uninstalling packages**:

```bash
uv pip uninstall requests
```

```bash
uv pip uninstall requests
```
- **Listing installed packages**:

```bash
uv pip freeze
```

```bash
uv pip freeze
```
- **Updating packages**:

```bash
uv pip install --upgrade requests
```

```bash
uv pip install --upgrade requests
```
- **Installing packages from a `requirements.txt` file**:
```bash
uv pip install -r requirements.txt
```

```bash
uv pip install -r requirements.txt
```

## How to use uv as a drop-in replacement for venv?
## 🌳 How to use uv as a drop-in replacement for venv?

`uv` can also replace `venv` for creating and managing virtual environments:

- **Creating a virtual environment**:

```bash
uv venv
```

This command creates a new virtual environment in the `.venv` directory by default. You can customize the location using the `--python` flag to specify a Python interpreter path.

```bash
uv venv
```
This command creates a new virtual environment in the `.venv` directory by default. You can customize the location or specify a Python interpreter:
```bash
uv venv --python 3.11
```
- **Activating the virtual environment**:

The activation process depends on your shell. For example, on bash:

```bash
source .venv/bin/activate
```

The activation process is the same as with `venv`. On macOS and Linux:
```bash
source .venv/bin/activate
```
On Windows:
```powershell
.venv\Scripts\Activate
```
- **Listing available Python interpreters**:
```bash
uv python list
```

```bash
uv python list
```

## How to use uv as a drop-in replacement for pipx?
## 🛠️ How to use uv as a drop-in replacement for pipx?

`uv` can also replace `pipx` for installing and managing globally available Python tools:

- **Installing a tool globally**:

```bash
uv tool install ruff
```

```bash
uv tool install ruff
```
- **Listing globally installed tools**:

```bash
uv tool list
```

```bash
uv tool list
```
- **Running a tool without installing it**:
This is useful for one-off commands without cluttering your global environment.
```bash
uv tool run ruff --version
```

```bash
uv tool run ruff --version
```

## How to install a Python version with uv?
## 🐍 How to install a Python version with uv?

`uv` can also be used to install specific Python versions, similar to `pyenv`. This is particularly useful when you need to test your code against different Python environments or when a project requires a specific Python version that is not your system's default.

- **Installing a specific Python version**:

```bash
uv python install 3.13
```

This command downloads and installs Python 3.13. You can then use this version to create virtual environments or run scripts.

```bash
uv python install 3.13
```
This command downloads and installs Python 3.13. You can then use this version to create virtual environments or run scripts.
- **Listing available Python versions**:

```bash
uv python list
```

```bash
uv python list
```
- **Listing installed Python versions**:

```bash
uv python list --only-installed
```

```bash
uv python list --only-installed
```
- **Removing a specific Python version**:
```bash
uv python remove 3.13
```

```bash
uv python remove 3.13
```
## 🎯 Key Takeaways

- **`uv` is a fast, all-in-one tool** for Python package and project management.
- It can replace `pip`, `venv`, `pipx`, and more, simplifying your workflow.
- In MLOps, `uv` shines by **speeding up CI/CD pipelines** and ensuring **reproducible environments**.
- Adopting `uv` can lead to a more efficient and streamlined development process.

## uv additional resources
## 📚 uv additional resources

- **[uv Documentation](https://docs.astral.sh/uv/)**: The official documentation provides comprehensive information on all `uv` features and commands.
- **[Poetry Was Good, Uv Is Better: An MLOps Migration Story](https://medium.com/@fmind/poetry-was-good-uv-is-better-an-mlops-migration-story-f52bf0c6c703)**
Expand Down