search
HomeBackend DevelopmentPython TutorialUV as an alternative to Poetry

There are somehow too many package managers for Python. This, of course, has an obvious reason - the paucity of functionality of pip, the built-in package manager. But still, the inner perfectionist wants a simple solution out of the box. Install Python - and you immediately get a fast and convenient package manager, and preferably a Python version manager. But instead you get pip. Some people, of course, actually use it, but still poetry, pdm, conda, pipenv or at least pip-tools are much more convenient.

Well, okay, it would seem that poetry is good for everyone. I use it myself in most projects. But installing dependencies starts to seem slow - especially when rebuilding the docker container. Plus there is a hassle with installing poetry itself or changing versions of python - you change the version through, for example, pyenv, and poetry gives an error when you try to recreate the environment. Although it is assumed that it can work with different versions of Python. This can be solved, of course, easily - by specifying the full path to the interpreter, but it’s still a crutch. As well as installing the same pyenv, and generally working with it. And there seems to be nothing more to control python versions.

And so, in February, an interesting solution appeared from the creators of Ruff. UV package manager written in Rast. Purely console-based, of course, and the syntax is very reminiscent of poetry. In terms of functionality, these are almost the same thing, but with a bunch of goodies and several times faster. The doc shows this diagram of the installation time for the same set of dependencies:

UV как альтернатива Poetry

The syntax is really similar to poetry. This is how, for example, a project is created (go straight to the directory):

uv init project
cd project

There we have this structure:

project
├── .python-version
├── hello.py
├── pyproject.toml
└── README.md

Dependencies, like poetry, are saved in the pyproject.toml config, the python version is saved in .python-version.

Let's create a virtual environment:

uv venv

Add SQLAlchemy depending on:

uv add sqlalchemy

Or we can add a specific version:

uv add sqlalchemy@2.0.32

Now let's delete:

uv remove sqlalchemy

Now sugar - python version management. Let's install 3.11.9 and create an environment with such an interpreter.

uv python install 3.11.9
uv venv --python 3.11.9

The Python version will be saved in .python-version, and you don’t need to point this out to the package manager every time you change the interpreter, because UV is the package manager. Moreover, you don’t even have to install the version manually, but immediately create an environment with the desired version: if it is not installed, then the UV itself will pull it, that is, you don’t have to think about it at all - well, it’s a thrill.

Like poetry, there is functionality for building and publishing packages on PyPI. You can build a container and publish a package using two commands:

uv build
uv publish

You can also use UV as a supervisor, and run scripts and applications using uv run

And the cherry on the cake is the docker image.

FROM ghcr.io/astral-sh/uv:python3.12

WORKDIR /app

RUN uv venv

CMD ["run", "app"]

You don’t need to pull the python image and install UVs there via pip, you can immediately pull the UV image and have fun. Plus there are a lot of other tricks there, but about this in the dock (which, by the way, is very clear) - those who need these chips in the dock will not be afraid to go into the dock.

In general, a really convenient tool and a good alternative to poetry. There is no UV support in any IDE yet, but it's a matter of time. It’s cool that there are so many features, I want the project to develop. Share this post and write what you use.

P.S. And you need to indulge in TGC: https://t.me/dmkjfss

The above is the detailed content of UV as an alternative to Poetry. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Python's Execution Model: Compiled, Interpreted, or Both?Python's Execution Model: Compiled, Interpreted, or Both?May 10, 2025 am 12:04 AM

Pythonisbothcompiledandinterpreted.WhenyourunaPythonscript,itisfirstcompiledintobytecode,whichisthenexecutedbythePythonVirtualMachine(PVM).Thishybridapproachallowsforplatform-independentcodebutcanbeslowerthannativemachinecodeexecution.

Is Python executed line by line?Is Python executed line by line?May 10, 2025 am 12:03 AM

Python is not strictly line-by-line execution, but is optimized and conditional execution based on the interpreter mechanism. The interpreter converts the code to bytecode, executed by the PVM, and may precompile constant expressions or optimize loops. Understanding these mechanisms helps optimize code and improve efficiency.

What are the alternatives to concatenate two lists in Python?What are the alternatives to concatenate two lists in Python?May 09, 2025 am 12:16 AM

There are many methods to connect two lists in Python: 1. Use operators, which are simple but inefficient in large lists; 2. Use extend method, which is efficient but will modify the original list; 3. Use the = operator, which is both efficient and readable; 4. Use itertools.chain function, which is memory efficient but requires additional import; 5. Use list parsing, which is elegant but may be too complex. The selection method should be based on the code context and requirements.

Python: Efficient Ways to Merge Two ListsPython: Efficient Ways to Merge Two ListsMay 09, 2025 am 12:15 AM

There are many ways to merge Python lists: 1. Use operators, which are simple but not memory efficient for large lists; 2. Use extend method, which is efficient but will modify the original list; 3. Use itertools.chain, which is suitable for large data sets; 4. Use * operator, merge small to medium-sized lists in one line of code; 5. Use numpy.concatenate, which is suitable for large data sets and scenarios with high performance requirements; 6. Use append method, which is suitable for small lists but is inefficient. When selecting a method, you need to consider the list size and application scenarios.

Compiled vs Interpreted Languages: pros and consCompiled vs Interpreted Languages: pros and consMay 09, 2025 am 12:06 AM

Compiledlanguagesofferspeedandsecurity,whileinterpretedlanguagesprovideeaseofuseandportability.1)CompiledlanguageslikeC arefasterandsecurebuthavelongerdevelopmentcyclesandplatformdependency.2)InterpretedlanguageslikePythonareeasiertouseandmoreportab

Python: For and While Loops, the most complete guidePython: For and While Loops, the most complete guideMay 09, 2025 am 12:05 AM

In Python, a for loop is used to traverse iterable objects, and a while loop is used to perform operations repeatedly when the condition is satisfied. 1) For loop example: traverse the list and print the elements. 2) While loop example: guess the number game until you guess it right. Mastering cycle principles and optimization techniques can improve code efficiency and reliability.

Python concatenate lists into a stringPython concatenate lists into a stringMay 09, 2025 am 12:02 AM

To concatenate a list into a string, using the join() method in Python is the best choice. 1) Use the join() method to concatenate the list elements into a string, such as ''.join(my_list). 2) For a list containing numbers, convert map(str, numbers) into a string before concatenating. 3) You can use generator expressions for complex formatting, such as ','.join(f'({fruit})'forfruitinfruits). 4) When processing mixed data types, use map(str, mixed_list) to ensure that all elements can be converted into strings. 5) For large lists, use ''.join(large_li

Python's Hybrid Approach: Compilation and Interpretation CombinedPython's Hybrid Approach: Compilation and Interpretation CombinedMay 08, 2025 am 12:16 AM

Pythonusesahybridapproach,combiningcompilationtobytecodeandinterpretation.1)Codeiscompiledtoplatform-independentbytecode.2)BytecodeisinterpretedbythePythonVirtualMachine,enhancingefficiencyandportability.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use