Ana içeriğe atla

Python UV: En Hızlı Python Paket Yöneticisine Kapsamlı Rehber

2026’nın en hızlı Python paket yöneticisi UV’yi nasıl kullanacağınızı öğrenin. 10 kat daha hızlı bağımlılık yönetimi, sanal ortamlar ve pip’ten sorunsuz geçişi keşfedin
Güncel 22 Nis 2026  · 11 dk. oku

Python UV nedir?

UV, Rust ile yazılmış, modern ve yüksek performanslı bir Python paket yöneticisi ve yükleyicisidir. pip gibi geleneksel Python paket yönetim araçlarının yerine doğrudan geçebilen bir alternatiftir ve hız, güvenilirlik ile bağımlılık çözümlemesinde önemli iyileştirmeler sunar.

Bu araç, Python ekosistemindeki yavaş kurulum süreleri, bağımlılık çatışmaları ve ortam yönetimi karmaşıklığı gibi yaygın sorunları çözmek için tasarlanmış yeni nesil bir Python paket yöneticisini temsil eder. UV, yenilikçi mimarisi ve verimli uygulaması sayesinde geleneksel paket yöneticilerinden 10–100 kat daha hızlıdır.

UV’yi öne çıkaran başlıca özellikler:

  • Şimşek hızında paket kurulumu ve bağımlılık çözümlemesi
  • Mevcut Python araçları ve iş akışlarıyla uyumlu
  • Yerleşik sanal ortam yönetimi
  • Modern paketleme standartlarını destekler
  • Güvenilir kilit dosyaları ve yeniden üretilebilir ortamlar
  • Özellikle büyük projelerde bellek açısından verimli çalışma

İster küçük kişisel projelerde ister büyük ölçekli Python uygulamalarında çalışıyor olun, UV paket yönetimi için sağlam ve verimli bir çözüm sunar. Bu eğitimde UV’nin tüm temel yönlerini ele alacağız, böylece hemen kullanmaya başlayabilirsiniz.

Kısa Özet

  • UV, pip’ten 10–100 kat daha hızlı, Rust tabanlı bir Python paket yöneticisidir
  • curl -LsSf https://astral.sh/uv/install.sh | sh ile kurun
  • uv init ile projeleri başlatın, uv add package ile bağımlılık ekleyin
  • uv run script.py ile betikleri çalıştırın—sanal ortamı elle etkinleştirmeniz gerekmez
  • UV; pip, virtualenv, pyenv ve pip-tools’un yerini tek bir araçta alır
  • Kilit dosyaları (uv.lock) makineler arasında yeniden üretilebilir ortamlar sağlar
  • uvx ile black ve ruff gibi CLI araçlarını kalıcı kurulum olmadan çalıştırın

UV, Poetry, PIP, Conda ve virtualenv Arasındaki Farklar

Geliştiricilerin yeni bir araca geçmeden önce en sık sorduğu soru genellikle “Halihazırda kullandığımla karşılaştırınca nasıl?” olur. Python bağımlılık ve proje yönetimi dünyasında şu dört araç en yaygın olanlardır:

Detaylara girmeden önce, UV’nin ihtiyaçlarınıza uygun olup olmadığına karar vermenize yardımcı olmak için UV’yi bu araçların her biriyle karşılaştıralım.

UV vs. PIP ve virtualenv

PIP ve virtualenv, Python paket yönetimi ve sanal ortam oluşturma için geleneksel araçlardır. İşlerini yapsalar da UV birkaç güçlü avantaj sunar:

  • Hız: UV’nin Rust uygulaması, paket kurulumu ve bağımlılık çözümlemesinde PIP’ten belirgin şekilde daha hızlıdır; PIP’in dakikalar sürecek işleri UV çoğu zaman saniyelerde tamamlar.
  • Tümleşik ortam yönetimi: virtualenv yalnızca ortam oluşturmayı, PIP ise yalnızca paket yönetimini üstlenirken UV bu iki işlevi tek bir araçta birleştirerek iş akışını sadeleştirir.

UV, PIP ekosistemiyle tam uyumluluğunu korurken temel sınırlamalarını giderir. Aynı requirements.txt dosyalarını ve paket dizinlerini kullanabilir; bu da geçişi sorunsuz kılar. Temel farklar şunlardır:

  • Performans: UV’nin paralel indirmeleri ve optimize bağımlılık çözücüsü, büyük projelerde PIP’ten 10–100 kat daha hızlıdır.
  • Bellek kullanımı: UV, kurulum ve bağımlılık çözümlemesi sırasında PIP’e kıyasla belirgin derecede daha az bellek kullanır.
  • Hata yönetimi: Bağımlılıklar çakıştığında UV daha net hata iletileri ve daha iyi çatışma çözümü sunar.
  • Yeniden üretilebilirlik: UV’nin kilit dosyası yaklaşımı, temel requirements.txt dosyalarının garanti etmediği şekilde farklı sistemlerde tutarlı ortamlar sağlar.

PIP ve virtualenv geçerli seçenekler olmaya devam etse de UV’nin modern mimarisi ve birleşik işlevselliği, daha iyi performans ve daha akıcı bir iş akışı arayan geliştiriciler için cazip bir alternatiftir. UV’yi mevcut projelere, yerleşik süreçleri bozmadan ekleyebilme olanağı, Python geliştirme araç zincirini kademeli olarak modernleştirmek isteyen ekipler için özellikle çekicidir.

UV vs. Conda

PIP ve virtualenv kullanmayanlar genellikle Conda’ya yönelir ve bunun iyi gerekçeleri vardır:

  • Conda, yalnızca Python paketlerini değil, sistem düzeyindeki bağımlılıkları da yöneten eksiksiz bir paket yönetimi çözümü sunar
  • NumPy, SciPy ve TensorFlow gibi paketlerle karmaşık bilimsel hesaplama ortamlarını yönetmede başarılıdır
  • Conda ortamları farklı işletim sistemlerinde daha izole ve yeniden üretilebilirdir
  • Farklı Python sürümleri için yerleşik desteğe sahiptir ve aralarında kolayca geçiş yapabilir
  • Anaconda dağıtımı birçok bilimsel paketi önceden kurulu olarak getirir; bu da veri bilimciler için kullanışlıdır

Ancak sıkı Conda kullanıcıları bile çeşitli nedenlerle UV’ye geçmeyi düşünebilir. (Ortam yönetim araçlarının daha geniş bir karşılaştırması için bkz. Anaconda vs Python: Farklarını Keşfetmek.) UV’nin yıldırım hızındaki kurulum ve bağımlılık çözümlemesi, Conda’nın zaman zaman ağırlaşan performansına kıyasla ortam kurulumunu dramatik biçimde hızlandırabilir. Asgari kaynak ayak izi, daha az bellek kullanımı ve daha hızlı başlangıçlar demektir. UV ayrıca mevcut Python paketleme standartları ve araçlarıyla sorunsuz bütünleşir; bu da daha geniş Python ekosistemiyle çalışmayı kolaylaştırır. Conda’nın Python dışı paket yönetimine ihtiyaç duyulmayan projelerde, UV geliştirme iş akışlarını belirgin biçimde iyileştirebilen daha yalın ve verimli bir çözüm sunar.

UV vs. Poetry

Neredeyse üç yıl Conda kullandım, ancak Poetry’i birkaç kez denedikten sonra kaplumbağa hızındaki Conda’ya bir daha dokunmadım. Tam Poetry ile rahatlamaya başlamışken UV ile karşılaştım ve UFO, Poetry ile neredeyse aynı yetenekleri sunuyor:

  • Bağımlılık yönetimi: Her iki araç da paket bağımlılıklarını ve sanal ortamları etkili biçimde yönetir
  • Proje yapısı: Her ikisi de Python projelerini başlatma ve yapılandırma araçları sağlar
  • Kilit dosyaları: Her ikisi de yeniden üretilebilir ortamlar için kilit dosyaları üretir
  • Paket yayımlama: Her ikisi de paketleri PyPI’a yayımlamayı destekler
  • Modern araç seti: Her ikisi de Python proje yönetimine modern yaklaşımlar sunar

Bununla birlikte, UV’yi tanımlayan özellik baş döndürücü hızı ve asgari kaynak kullanımıdır. Poetry, geleneksel araçlara kıyasla önemli bir ilerleme olsa da UV, Rust uygulaması sayesinde performansı bir üst seviyeye taşır. Ayrıca UV’nin mevcut Python paketleme ile uyumluluğu, pip gibi diğer araçlarla yan yana çalışabilmesi anlamına gelir; bu da bazen daha kuralcı yaklaşımıyla esnekliği sınırlayan Poetry’ye göre avantaj sağlar.

Az önce değindiğimiz farkları özetleyen bir tablo aşağıda yer alıyor: 

Özellik

UV

PIP + virtualenv

Conda

Poetry

Uygulama dili

Rust

Python

Python

Python

Hız

pip’ten 10–100x hızlı

Temel düzey

pip’ten yavaş

pip’ten hızlı

Bellek Kullanımı

Çok verimli

Daha yüksek

Yüksek

Orta

Ortam Yönetimi

Yerleşik

Ayrı araçlar gerekir

Yerleşik

Yerleşik

Bağımlılık Çözümlemesi

Hızlı, modern çözücü

Temel

Kapsamlı

Modern çözücü

Python Dışı Paketler

Hayır

Hayır

Evet

Hayır

Kilit Dosyaları

Evet

Hayır (temel requirements.txt)

Evet

Evet

Proje Yapısı

Evet

Hayır

Hayır

Evet

Paket Yayımlama

Evet

Evet (twine ile)

Evet

Evet

Uyumluluk

Mevcut pip ekosistemiyle çalışır

Standart Python aracı

Kendi ekosistemi

Daha kuralcı yaklaşım

Hata Yönetimi

Açık hata iletileri

Temel

İyi

İyi

Kaynak Ayak İzi

Asgari

Orta

Ağır

Orta

Bilimsel Hesaplama Odaklılık

Hayır

Hayır

Evet

Hayır

Çapraz Platform Tutarlılığı

Evet

Sınırlı

Mükemmel

İyi

UV’ye geçmeye değer olduğunu düşünüyorsanız, okumaya devam edin.

Python Projeleri İçin UV ile Başlarken

Bu bölümde, sıfırdan bir projeye UV ile nasıl başlayacağınızı ele alıyoruz. Önce Python geliştirme ortamınızı kurma konusunda yardıma ihtiyacınız varsa rehberimize göz atın. Mevcut projelerden UV’ye geçişi daha sonra tartışacağız.

UV’nin kurulumu

UV, macOS ve Linux’ta cURL ile sistem geneline kurulabilir:

$ curl -LsSf https://astral.sh/uv/install.sh | sh

Windows’ta ise Powershell ile (Powershell’i yönetici yetkileriyle çalıştırdığınızdan emin olun):

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

UV, Homebrew üzerinden de kullanılabilir:

$ brew install uv

PIP ile kurulum desteklenir ancak önerilmez:

$ pip install uv  # Make sure you have a virtual environment activated

Ardından uv version komutunu çalıştırarak kurulumu doğrulayabilirsiniz:

$ uv version
uv 0.6.14 (2026-03-13)

UV’yi güncelleme

UV, bağımsız yükleyiciyle kurulduğunda kendini güncelleyebilir:

$ uv self update

UV’yi Homebrew ile kurduysanız bunun yerine brew upgrade uv kullanın. UV komutları için kabuk otomatik tamamlamayı da etkinleştirebilirsiniz:

$ echo 'eval "$(uv generate-shell-completion zsh)"' >> ~/.zshrc  # For Zsh
$ echo 'eval "$(uv generate-shell-completion bash)"' >> ~/.bashrc  # For Bash

Yeni bir projenin başlatılması

Projeler üzerinde çalışmak, UV deneyiminin özüdür. uv init komutuyla boş bir proje başlatarak işe başlarsınız:

$ uv init explore-uv
Initialized project explore-uv at /Users/bexgboost/projects/explore-uv

Komut, aşağıdaki içerikle birlikte anında yeni bir explore-uv dizini oluşturur:

$ cd explore-uv
$ tree -a
.
├── .gitignore
├── .python-version
├── README.md
├── hello.py
└── pyproject.toml

Git otomatik olarak başlatılır ve .gitignore ile boş bir README.md gibi ana git’e ilişkin dosyalar üretilir. .python-version dosyası projede kullanılan Python sürümünü içerirken pyproject.toml, proje metaverisi ve bağımlılıkları için ana yapılandırma dosyası görevi görür. Hızlı başlamanıza yardımcı olmak için bir örnek hello.py dosyası da oluşturulur.

UV belgelerinden proje oluşturma hakkında daha fazlasını öğrenebilirsiniz.

Projeye ilk bağımlılıkların eklenmesi

UV, ortam oluşturma ve bağımlılık kurulumunu tek bir komutta birleştirir — uv add:

$ uv add scikit-learn xgboost
Using CPython 3.9.20 interpreter at: /opt/homebrew/opt/python@3.9/bin/python3.9
Creating virtual environment at: .venv
Resolved 6 packages in 1.78s
⠧ Preparing packages... (2/5)
Prepared 5 packages in 1m 23s
Installed 5 packages in 45ms
 + joblib==1.4.2
 + numpy==2.0.2
 + scikit-learn==1.5.2
 ...

İlk kez add komutunu çalıştırdığınızda, UV geçerli çalışma dizininde yeni bir sanal ortam oluşturur ve belirtilen bağımlılıkları kurar. Sonraki çalıştırmalarda UV mevcut sanal ortamı yeniden kullanır ve yalnızca yeni talep edilen paketleri kurar veya günceller; böylece bağımlılık yönetimi verimli olur.

Her add komutunda gerçekleşen bir diğer önemli işlem de bağımlılıkların çözümlemesidir. UV, tüm bağımlılık grafiğini analiz ederek tüm gereksinimleri karşılayan uyumlu bir paket sürümleri kümesi bulan modern bir çözücü kullanır. Bu, sürüm çatışmalarını önlemeye ve yeniden üretilebilir ortamlar sağlamaya yardımcı olur. Çözücü, sürüm kısıtları, Python sürüm uyumluluğu ve platforma özgü gereksinimler gibi etmenleri dikkate alarak kurulacak en uygun paket kümesini belirler.

UV ayrıca her ekleme komutundan sonra pyproject.toml ve uv.lock dosyalarını günceller. Scikit-learn ve XGBoost kurulduktan sonra TOML dosyası şöyle görünür:

$ cat pyproject.toml
[project]
name = "explore-uv"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.9"
dependencies = [
    "scikit-learn>=1.5.2",
    "xgboost>=2.0.3",
]

Bir bağımlılığı ortamdan ve pyproject.toml dosyasından kaldırmak için uv remove komutunu kullanabilirsiniz. Bu komut, paketi ve onun alt bağımlılıklarını kaldırır:

$ uv remove scikit-learn

Bağımlılık yönetimini daha ayrıntılı olarak ileride ele alacağız.

Python betiklerini UV ile çalıştırma

Gerekli bağımlılıkları kurduktan sonra Python betikleriniz üzerinde her zamanki gibi çalışmaya başlayabilirsiniz. VS Code kullanıyorsanız, Python için VS Code kurulumu rehberimize göz atın. UV, Python kodunu çalıştırmak için birkaç farklı yol sunar:

Bir Python betiğini doğrudan çalıştırmak için, python script.py yerine betiğinizin adını izleyen uv run komutunu kullanabilirsiniz:

$ uv run hello.py

run komutu, betiğin projeniz için UV’nin oluşturduğu sanal ortam içinde yürütülmesini sağlar.

Satır içi bağımlılıklarla (PEP 723) betik çalıştırma

UV, bağımlılıkları doğrudan bir Python betiği içinde bildirmenize olanak tanıyan PEP 723 satır içi betik üstverisini destekler. Bu, tam bir proje kurmadan paketlere ihtiyaç duyan bağımsız betikler için kullanışlıdır:

# /// script
# requires-python = ">=3.11"
# dependencies = [
#     "requests",
#     "rich",
# ]
# ///

import requests
from rich.console import Console

console = Console()
response = requests.get("https://api.github.com")
console.print(f"GitHub API status: [bold green]{response.status_code}[/bold green]")

uv run ile betiği çalıştırın; UV, bildirilen bağımlılıklarla yalıtılmış bir ortamı otomatik olarak oluşturur:

$ uv run script.py
GitHub API status: 200

Bu yaklaşım, yeniden üretilebilir betikleri meslektaşlarla paylaşmak için özellikle güçlüdür—UV yüklü olan herkes betiği bağımlılıkları elle kurmadan çalıştırabilir.

 

UV’de Python Sürümlerinin Yönetimi

Python sürümlerinin yönetimi, bağımlılık yönetiminin kilit bir parçasıdır. UV, hangi Python sürümünü kullanacağınızı denetlemek için basit komutlar sağlar. uv python komutunun kullanımını inceleyelim.

UV ile Python sürümlerini kurmak

UV, pyenv gibi araçlara olan ihtiyacı ortadan kaldırarak Python sürümlerini doğrudan kurup yönetebilir:

$ uv python install 3.12
$ uv python install 3.11 3.13  # Install multiple versions at once

Python kurulumları ~/.local/share/uv/python/ içinde saklanır ve sistem Python’unuza müdahale etmez. Bir projeyi belirli bir Python sürümüne sabitleyebilirsiniz:

$ uv python pin 3.12

Bu, proje dizininizdeki .python-version dosyasını günceller. UV daha sonra proje işlemlerinin tümünde bu sürümü kullanır.

Mevcut Python sürümlerini listelemek

Sistemlerde Python’un halihazırda kurulu olması yaygın olduğundan UV bu kurulumları varsayılan olarak bulabilir. Örneğin, UV’nin sisteminizde algıladığı tüm Python sürümlerini listelemek için şu komutu çalıştırın:

$ uv python list --only-installed
cpython-3.13.0-macos-aarch64-none     /opt/homebrew/opt/python@3.13/bin/python3.13 -> ../Frameworks/Python.framework/Versions/3.13/bin/python3.13
cpython-3.12.7-macos-aarch64-none     /opt/homebrew/opt/python@3.12/bin/python3.12 -> ../Frameworks/Python.framework/Versions/3.12/bin/python3.12
cpython-3.12.5-macos-aarch64-none     /Users/bexgboost/miniforge3/bin/python3.12
cpython-3.12.5-macos-aarch64-none     /Users/bexgboost/miniforge3/bin/python3 -> python3.12
cpython-3.12.5-macos-aarch64-none     /Users/bexgboost/miniforge3/bin/python -> python3.12
cpython-3.11.10-macos-aarch64-none    /opt/homebrew/opt/python@3.11/bin/python3.11 -> ../Frameworks/Python.framework/Versions/3.11/bin/python3.11
cpython-3.11.7-macos-aarch64-none     /Users/bexgboost/.local/share/uv/python/cpython-3.11.7-macos-aarch64-none/bin/python3 -> python3.11
cpython-3.10.15-macos-aarch64-none    /opt/homebrew/opt/python@3.10/bin/python3.10 -> ../Frameworks/Python.framework/Versions/3.10/bin/python3.10
cpython-3.9.20-macos-aarch64-none     /opt/homebrew/opt/python@3.9/bin/python3.9 -> ../Frameworks/Python.framework/Versions/3.9/bin/python3.9
cpython-3.9.6-macos-aarch64-none      /Library/Developer/CommandLineTools/usr/bin/python3 -> ../../Library/Frameworks/Python3.framework/Versions/3.9/bin/python3

Komut, Conda ve Brew ile kurulmuş Python sürümlerimi doğru şekilde algıladı.

Geçerli proje için Python sürümünü değiştirme 

pyproject.toml dosyanızdaki belirtimleri karşıladığı sürece, geçerli UV projenizde Python sürümlerini dilediğiniz zaman değiştirebilirsiniz. Örneğin aşağıdaki dosya, 3.9 ve üzeri Python sürümlerini gerektirir:

...
requires-python = ">=3.9"

Bu, .python-version dosyasındaki Python sürümünü 3.11.7 gibi daha yüksek herhangi bir sürüme değiştirebileceğiniz anlamına gelir. Sonrasında uv sync çağrısı yapın.

Komut önce mevcut Python kurulumlarını denetler. İstenen sürüm bulunamazsa UV, /Users/username/.local/share/uv/python yoluna indirip kurar. UV ayrıca proje dizini içinde eskisinin yerine geçecek yeni bir sanal ortam oluşturur. 

uv sync komutu her şeyi otomatik olarak halleder—yeni sanal ortamı oluşturur ve pyproject.toml ile uv.lock dosyalarınızdaki tüm bağımlılıkları yeniden kurar. Ek bir kurulum adımı gerekmez.

Bazen uv komutlarının Permission Denied hataları verebileceğini unutmayın. Bu durumlarda macOS veya Linux kullanıyorsanız sudo komutunu kullanın, Windows’taysanız komut istemini yönetici yetkileriyle çalıştırın. Daha da iyi bir çözüm, UV ana dizininin sahipliğini kullanıcıya vermektir:

$ sudo chown -R $USER ~/.local/share/uv  # macOS or Linux

UV ile Python sürümlerini yönetme hakkında daha fazla bilgi için belgelere bakın. 

UV Araçları Nedir ve Nasıl Kullanılır?

Bazı Python paketleri, kod biçimlendirme için black, linting için flake8, test için pytest, tip denetimi için mypy gibi komut satırı aracı olarak sunulur. UV bu paketleri yönetmek için iki özel arayüz sağlar:

1. uv tool run kullanarak:

$ uv tool run black hello.py

2. Daha kısa ve kullanışlı uvx komutunu kullanarak:

$ uvx black hello.py

Bu komutlar çalıştırıldığında UV, önbelleğinde geçici bir sanal ortam oluşturur. İstenen araç oraya kurulur ve oradan çalıştırılır. Başka bir deyişle, komut satırı araçlarını proje sanal ortamına kurmadan kullanabilirsiniz; bu da daha hızlı yürütme ve daha temiz proje bağımlılıkları sağlar.

Araç çalıştırma arayüzleri hakkında kilit noktalar:

  • flake8, mypy, black veya pytest gibi komut satırı aracı sağlayan herhangi bir Python paketiyle çalışır
  • Önbelleğe alınmış ortamlar, UV önbelleği temizlendiğinde otomatik olarak kaldırılır
  • Gerektiğinde talebe bağlı yeni önbellekli ortamlar oluşturulur
  • Geliştirme araçlarını ara sıra kullanmak için idealdir
  • Sık kullandığınız araçlar için uv tool install ile kalıcı kurulum yapın:
$ uv tool install ruff
$ uv tool install black
$ ruff check .  # Now available directly in PATH

Kalıcı olarak kurulan araçlar, herhangi bir projenin sanal ortamını kirletmeden PATH üzerinden küresel olarak kullanılabilir. uv tool upgrade ruff ile bunları güncelleyebilir, uv tool list ile tüm kurulu araçları listeleyebilirsiniz.

Bu arayüzler hakkında daha fazla bilgi için belgelerin UV Tools bölümünü okuyun.

UV’de Kilit Dosyaları Nedir?

Kilit dosyaları (uv.lock), UV’de bağımlılık yönetiminin temel parçalarındandır. uv add komutlarıyla bağımlılıkları kurduğunuzda UV otomatik olarak bir uv.lock dosyası üretir ve günceller. Bu kilit dosyası birkaç kritik amaca hizmet eder:

  • Kurulan tüm bağımlılıkların ve alt bağımlılıkların tam sürümlerini kaydeder.
  • Bağımlılık sürümlerini “kilitleyerek” farklı ortamlarda yeniden üretilebilir derlemeler sağlar.
  • Tutarlı paket sürümleri koruyarak “bağımlılık cehennemini” önlemeye yardımcı olur.
  • UV, yeniden çözümleme yerine kilitli sürümleri kullanabildiğinden kurulumları hızlandırır.

UV, kilit dosyasını otomatik olarak yönetir—elle düzenlemeniz gerekmez. Tüm geliştiricilerin aynı bağımlılık sürümlerini kullanmasını sağlamak için kilit dosyasını sürüm kontrolüne dahil etmelisiniz.

Kilit Dosyaları ile requirements.txt Arasındaki Fark

Kilit dosyaları ve requirements.txt her ikisi de bağımlılıkları izlemek için kullanılsa da amaçları ve kullanım alanları farklıdır. Kilit dosyaları, tam paket sürümleri ve eksiksiz bağımlılık ağacına dair ayrıntılı bilgiler içerir ve geliştirme ortamlarında tutarlılık sağlar. Requirements.txt dosyaları ise genellikle yalnızca doğrudan bağımlılıkları listeler ve Python araçları arasında yaygın biçimde desteklenir.

Kilit dosyaları, yeniden üretilebilir derlemeleri korumak ve bağımlılık çatışmalarını önlemek için geliştirmede kritik öneme sahiptir. Requirements.txt dosyaları ise dağıtım senaryoları veya UV kullanmayan kullanıcılara kod paylaşımı için daha uygundur. Ayrıca UV’nin kilit dosyası biçimini desteklemeyen araç ve hizmetlerle uyumluluk için de gereklidir.

Geliştirmede UV’nin kilit dosyasını kullanırken dağıtım için bir requirements.txt üretip her iki dosyayı da sürdürebilirsiniz. UV kilit dosyasından requirements.txt üretmek için şu komutu kullanın:

$ uv export -o requirements.txt

Bu komut, kilit dosyanıza dayalı sabitlenmiş sürümlerle metin dosyasını oluşturur; böylece geliştirme sırasında UV’nin gelişmiş bağımlılık yönetiminden yararlanırken projenizin bağımlılıklarını standart bir biçimde paylaşmanız kolaylaşır.

Kilit dosyalarını yönetme hakkında daha fazlasını belgelerde bulabilirsiniz. 

UV ile İleri Düzey Bağımlılık Yönetimi

Bu bölümde, UV’de bağımlılıkları yönetmenin daha gelişmiş yöntemlerini keşfedeceğiz. Bağımlılıkları nasıl güncelleyeceğimizi, isteğe bağlı hale getireceğimizi veya bir bağımlılık grubunun parçası yapacağımızı öğreneceğiz.

Bağımlılıkları güncelleme

Uzun soluklu projelerde, en güncel özellikleri kullanmak için paketleri güncellemek yaygındır. Ya da bazen kullandığınız bir paket kırıcı değişiklikler getirir ve bu sürümün ortamınıza kazara kurulmadığından emin olmak istersiniz. add komutu, mevcut bağımlılıkların kısıtlarını veya sürümlerini değiştirmeniz gereken bu ve benzeri tüm senaryolarda yeniden kullanılabilir.

1. Bir paketin en son sürümünü kurmak:

$ uv add requests

2. Belirli bir sürümü kurmak:

$ uv add "requests==2.1.2"

3. Bir paketin kısıt aralıklarını değiştirmek:

$ uv add 'requests<3.0.0'

4. Bir bağımlılığı platforma özgü yapmak:

$ uv add 'requests; sys_platform="linux"' 

İsteğe bağlı bağımlılıkları ekleme

İsteğe bağlı bağımlılıklar, projenizin çekirdek işlevselliği için zorunlu olmayan ancak belirli özellikler için gerekebilen paketlerdir. Örneğin, Pandas’ta Excel ayrıştırıcıları ve matplotlib yalnızca açıkça istendiğinde kurulsun diye excel ve plot ekstraları bulunur. İsteğe bağlılar genellikle pip install pandas[plot, excel] söz dizimiyle kurulur. 

UV ile bu söz dizimi biraz farklıdır. Önce çekirdek Pandas paketinin kurulu olduğundan emin olun:

$ uv add pandas

Ardından, köşeli ayraç gösterimiyle isteğe bağlı ekstralarla birlikte kurun:

$ uv add "pandas[plot,excel]"

Çözümlendikten sonra pyproject.toml dosyanızda şu biçimde listeleneceklerdir:

[project]
name = "explore-uv"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.9"
dependencies = [
    "pandas[plot,excel]>=2.2.3",
    "requests>=2.32.3",
]

Bağımlılık grupları

Bağımlılık grupları, bağımlılıkları geliştirme, test veya dokümantasyon bağımlılıkları gibi mantıksal kümelere ayırmanıza olanak tanır. Bu, üretim bağımlılıklarını geliştirme bağımlılıklarından ayrı tutmak için kullanışlıdır.

Belirli bir gruba bağımlılık eklemek için --group bayrağını kullanın:

$ uv add --group group_name package_name

Ardından kullanıcılar, --group, --only-group ve --no-group etiketlerini kullanarak hangi grupların kurulacağını denetleyebilir.

PIP ve Virtualenv’den UV’ye Geçiş

UV, mevcut Python paketleme standartlarıyla uyumluluğunu koruduğundan PIP ve virtualenv’den UV’ye geçiş basittir. Geçişi sorunsuz hale getirmek için adım adım bir rehber:

1. Mevcut bir virtualenv projesini dönüştürmek

virtualenv ve pip kullanan mevcut bir projeniz varsa ve henüz yapmadıysanız geçerli ortamınızdan bir requirements.txt dosyası oluşturarak başlayın:

$ pip freeze > requirements.txt

Ardından, aynı dizinde yeni bir UV projesi oluşturun:

$ uv init .

Son olarak, bağımlılıkları requirements dosyanızdan kurun:

$ uv pip install -r requirements.txt

2. Yaygın pip/virtualenv komutlarını değiştirmek

Yaygın pip ve virtualenv komutlarının UV’deki karşılıklarına hızlı bir referans:

pip/virtualenv komutu

UV karşılığı

python -m venv .venv

uv venv

pip install package

uv add package

pip install -r requirements.txt

uv pip install -r requirements.txt

pip uninstall package

uv remove package

pip freeze

uv pip freeze

pip list

uv pip list

Geçişten sonra eski virtualenv dizininizi güvenle kaldırabilir ve UV’nin sanal ortam yönetimini kullanmaya başlayabilirsiniz. Geçiş genellikle sorunsuzdur ve gerekirse UV’nin pip uyumluluk katmanı üzerinden pip komutlarına her zaman geri dönebilirsiniz.

CI/CD ve Docker’da UV Kullanımı

UV’nin hızı, her derlemede bağımlılıkların kurulduğu CI/CD hatlarında onu özellikle değerli kılar. UV kullanan bir GitHub Actions iş akışı örneği:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install uv
        uses: astral-sh/setup-uv@v3
      - name: Set up Python
        run: uv python install 3.12
      - name: Install dependencies
        run: uv sync --frozen --dev
      - name: Run tests
        run: uv run pytest tests/

--frozen bayrağı, CI’ın kilit dosyanızdaki sürümleri birebir kullanmasını ve kilit dosyası güncel değilse başarısız olmasını sağlar. Bu, yeniden üretilebilir derlemeleri garanti eder.

Docker entegrasyonu

UV, Docker imaj oluşturmayı da belirgin biçimde hızlandırabilir:

FROM python:3.12-slim

# Install uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/

WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --no-dev --no-editable

COPY . .
CMD ["uv", "run", "python", "app.py"]

Önce bağımlılık dosyalarını kopyalayıp kurulumları kaynak kodunu kopyalamadan önce yaparak Docker katman önbelleklemesinden tam faydalanırsınız. pyproject.toml veya uv.lock değişmediği sürece bağımlılık kurulumu yeniden çalıştırılmaz.

Sonuç

UV, Python paket yönetiminde önemli bir ilerleme sunar; geleneksel araçlara modern, hızlı ve verimli bir alternatif sağlar. Başlıca avantajları şunlardır:

  • pip’e göre 10–100x hız artışıyla olağanüstü performans
  • Mevcut Python paketleme standartlarıyla sorunsuz entegrasyon
  • Yerleşik sanal ortam yönetimi
  • Verimli bağımlılık çözümlemesi ve kilit dosyası desteği
  • Düşük bellek ayak izi ve kaynak kullanımı

Yeni bir projeye başlıyor ya da mevcut bir projeyi taşıyor olun, UV Python geliştirme iş akışınızı belirgin biçimde iyileştirebilecek sağlam bir çözüm sunar. Mevcut araçlarla uyumluluğu, geçerli süreçleri bozmadan araç zincirinizi modernleştirmek isteyen geliştiriciler için onu kolay bir tercih haline getirir.

Python ekosistemi gelişmeye devam ederken UV gibi araçlar, Rust gibi modern teknolojilerin geliştirme deneyimini nasıl iyileştirebildiğini; bunu yaparken de Python geliştiricilerinin değer verdiği sadelik ve erişilebilirliği nasıl koruduğunu gösteriyor.

Bağımlılık yönetimi veya genel olarak Python hakkında daha fazlasını öğrenmek isterseniz şu ek kaynaklara bakın:

Python UV SSS

Python paket yönetimi için UV, pip’ten daha hızlı mı?

Evet, UV paket kurulumu ve bağımlılık çözümlemesi için pip’ten belirgin şekilde daha hızlıdır; 10–100 kata varan hız artışları sunar. Bu performans artışı, UV’nin Rust uygulaması ve optimize paralel indirme yetenekleri sayesinde elde edilir. Özellikle büyük projelerde, pip ile dakikalar alan işler UV ile saniyelerde tamamlanabilir.

UV’yi mevcut pip requirements.txt dosyalarıyla kullanabilir miyim?

Evet, UV mevcut pip requirements.txt dosyalarıyla tamamen uyumludur ve uv pip install -r requirements.txt komutunu kullanarak bunları doğrudan içe aktarabilir. UV, daha iyi performans ve bağımlılık yönetimi özellikleri sunarken Python paketleme ekosistemiyle uyumluluğunu korur.

UV’nin Poetry ve Conda’ya göre avantajları nelerdir?

UV’nin Poetry ve Conda’ya göre çeşitli avantajları vardır:

  • Rust uygulaması sayesinde daha hızlı performans
  • Daha düşük bellek kullanımı ve kaynak ayak izi
  • Mevcut Python araçlarıyla daha iyi uyumluluk
  • Conda’ya kıyasla daha basit iş akışı
  • Poetry’nin kuralcı yapısına kıyasla daha esnek yaklaşım

Conda, Python dışı paketleri yönetmede; Poetry ise güçlü proje yönetimi sunmada öne çıksa da UV, hız ve uyumluluğun en iyi dengesini sağlar.

UV sanal ortamları destekliyor mu?

Evet, UV yerleşik sanal ortam yönetimine sahiptir. Bir projede ilk kez uv add çalıştırdığınızda otomatik olarak bir sanal ortam oluşturur ve sizin için yönetir. UV, ortam oluşturma ve paket yönetimini tek bir araçta birleştirerek pip ve virtualenv gibi ayrı araçlar kullanmaya kıyasla Python geliştirme iş akışını sadeleştirir.


Bex Tuychiev's photo
Author
Bex Tuychiev
LinkedIn

2 yılı aşkın deneyime sahip bir veri bilimi içerik üreticisiyim ve Medium'da en büyük takipçi kitlelerinden birine sahibim. Yapay zeka ve makine öğrenimi üzerine, biraz da alaycı bir üslupla, ayrıntılı yazılar yazmayı seviyorum; çünkü bu konuları biraz olsun sıkıcılıktan çıkarmak gerekiyor. 130'dan fazla makale ve bir DataCamp kursu hazırladım; bir diğeri de yolda. İçeriklerim 5 milyondan fazla kişi tarafından görüntülendi; bunların 20 bini Medium ve LinkedIn'de takipçim oldu. 

Konular

En İyi DataCamp Kursları

Program

Python Veri Temelleri

28 sa
Veri becerilerinizi geliştirin, verileri nasıl manipüle edeceğinizi ve görselleştireceğinizi keşfedin ve veri odaklı kararlar almak için gelişmiş analitik uygulayın.
Ayrıntıları GörRight Arrow
Kursa Başla
Devamını GörRight Arrow