Python Programming

Python Paketleme Uzmanlığı: Dağıtım İçin Modern Bir Rehber

Çoğu Python geliştiricisi için kod yazmak kolay kısımdır. Gerçek zorluk, bu kodu dünyayla paylaşmanız veya projenizin farklı ortamlarda tutarlı bir şekilde kurulmasını sağlamanız gerektiğinde başlar. Python paketleme son yıllarda önemli bir evrim geçirdi; geçmişin parçalı uygulamalarından uzaklaşarak standartlaştırılmış, sağlam bir ekosisteme doğru ilerledi. İster PyPI için bir kütüphane geliştiriyor olun, ister karmaşık bir iç uygulama için bağımlılıkları yönetiyor olun, modern araç setlerini anlamak profesyonel geliştirme için esastır.

setup.py'den pyproject.toml'a Geçiş

Tarihsel olarak setup.py, Python paketlemenin omurgasıydı. Ancak bunun birkaç sınırlaması vardı: rastgele yürütülebilir kod içerebiliyordu, bu da bir güvenlik riski oluşturuyordu ve karmaşık derleme bağımlılıklarını tanımlamak için bildirimsel (declarative) bir yolu yoktu. Python topluluğu, PEP 518 ve PEP 621 ile bu sorunları ele alarak proje meta verileri ve derleme yapılandırması için tek doğruluk kaynağı olarak pyproject.toml dosyasını tanıttı.

Bugün, modern bir pyproject.toml minimal ancak bildirimsel olmalıdır. Proje adınızı, sürümünüzü, bağımlılıklarınızı ve kullanmak istediğiniz derleme arka ucunu (build backend) tanımlar. Aşağıda, arka uç olarak setuptools kullanan bir proje için standart bir örnek bulunmaktadır:

[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "my-advanced-lib"
version = "0.1.0"
description = "A modern Python library example"
readme = "README.md"
license = {text = "MIT"}
requires-python = ">=3.8"
authors = [
  {name = "Dev Name", email = "dev@example.com"}
]
dependencies = [
  "requests>=2.28.0",
  "click>=8.0"
]

[project.optional-dependencies]
dev = [
  "pytest>=7.0",
  "black>=22.0"
]

Doğru Derleme Arka Ucunu Seçmek

setuptools birçok araçta varsayılan arka uç olmaya devam etse de, tek seçenek değildir. Hatchling ve Flit gibi modern alternatifler daha hızlı derleme süreleri ve daha basit yapılandırmalar sunar. Özellikle Hatchling, hızlı ve güvenilir olması, setuptools'un birçok eski karmaşıklığını ortadan kaldırması nedeniyle giderek daha fazla popülerlik kazanmaktadır.

Bir arka uç seçerken projenizin karmaşıklığını göz önünde bulundurun. Basit saf Python paketleri dağıtıyorsanız, Flit veya Hatchling mükemmel seçeneklerdir. Eski araçlara veya karmaşık C uzantılarına heavily bağlıysanız, setuptools hala gerekli olabilir. Arka ucun ne olursa olsun, temel nokta yapılandırmanızı bildirimsel (declarative) tutmaktır.

Wheels Olarak Dağıtım

Kodunuzu dağıttığınızda, "wheels" (.whl dosyaları) üretmeyi hedeflemelisiniz. Kurulum sırasında kullanıcının sisteminin paketi derlemesini gerektiren kaynak dağıtımlarından (sdist) farklı olarak, wheels önceden derlenmiş ikili dosyalardır. Bu, kurulum süresini önemli ölçüde azaltır ve eksik sistem kütüphaneleri veya derleyicilerden kaynaklanan derleme hatalarını önler.

Genellikle bir wheel oluşturmak için build gibi bir araç kullanırsınız. Bu, derleme arka ucunuzu saran bağımsız bir komut satırı aracıdır:

python -m build

Bu komut, hem sdist'i hem de wheel'i içeren bir dist/ dizini oluşturacaktır. Wheel dosyası, Python sürümünü, ABI'yi ve platformu kodlayan belirli bir adlandırma kuralına sahip olacaktır; bu da pip'in kullanıcı için doğru varyantı yüklemesini sağlar.

PyPI'ye Yükleme

Paketiniz oluşturulduktan sonra son adım dağıtımdır. Halka açık paketler için bu genellikle Python Paket Dizini'ne (PyPI) yükleme anlamına gelir. Bu görev için önerilen araç twine'tır. Güvenli, doğrulanmış yüklemeler sağlar ve aktarım öncesinde meta verilerinizi yaygın hatalara karşı kontrol eder.

Paketinizi her zaman önce TestPyPI üzerinde test edin. Bu izole ortam, ana depoyu etkilemeden yükleme işlemini doğrulamanıza olanak tanır. Komut oldukça basittir:

twine upload --repository testpypi dist/*

Sonuç

Python paketlemeyi ustalaşmak sadece sözdizimi kurallarını takip etmekle ilgili değildir; kodunuzun paylaşılmasını, kurulmasını ve güvenilir bir şekilde sürdürülmesini sağlayan ekosistemi anlamakla ilgilidir. pyproject.toml'u benimseyerek, uygun derleme arka uçlarını seçerek ve wheels olarak dağıtarak, yazılımınızın kalite ve güvenlik konusunda modern standartlara uygun olduğundan emin olursunuz. Python ekosistemi gelişmeye devam ettikçe, PEP'ler ve en iyi uygulamalar hakkında bilgi sahibi olmak, dağıtım stratejilerinizin etkili ve geleceğe yönelik kalmasını sağlar.

Share: