Ubuntu’ya Python 3.12 Kurulumu ve Güncelleme

Python ekosistemi hızla gelişmeye devam ediyor ve her yeni sürüm beraberinde ciddi performans iyileştirmeleri, yeni özellikler ve güvenlik yamaları getiriyor. Python 3.12, özellikle hata mesajlarının okunabilirliği, performans artışları ve tip sistemi geliştirmeleri açısından önemli bir adım. Ancak Ubuntu’nun varsayılan paket depolarında her zaman en güncel Python sürümünü bulamıyorsunuz. Bu yazıda Ubuntu sistemine Python 3.12’yi nasıl kuracağınızı, mevcut kurulumla nasıl birlikte çalıştıracağınızı ve sanal ortam yönetimini nasıl yapacağınızı adım adım ele alacağız.

Neden Python 3.12?

Ubuntu 22.04 LTS, varsayılan olarak Python 3.10 ile geliyor. Ubuntu 23.10 ve sonrası 3.11’i sunuyor. Ama özellikle yeni bir proje başlatıyorsanız ya da belirli bir kütüphane Python 3.12 gerektiriyorsa, sisteminizi buna göre yapılandırmanız gerekiyor.

Python 3.12 ile gelen öne çıkan yenilikler şunlar:

  • f-string geliştirmeleri: Artık f-string içinde çok daha karmaşık ifadeler kullanabiliyorsunuz
  • Daha iyi hata mesajları: Hata mesajları artık sorunun tam olarak nerede olduğunu çok daha net gösteriyor
  • %12 performans artışı: CPython tarafında yapılan optimizasyonlar sayesinde genel performansta kayda değer iyileşme var
  • Yeni tip sistemi özellikleri: @override dekoratörü ve TypeVar geliştirmeleri
  • sys.monitoring API: Daha verimli profiling ve debugging imkanı

Bunların yanı sıra, bazı eski ve deprecated olan özellikler kaldırıldı. Yani mevcut kodunuzu 3.12’ye taşıyorsanız, küçük uyumluluk sorunlarıyla karşılaşabilirsiniz. Ama yeni projeler için Python 3.12 kesinlikle iyi bir başlangıç noktası.

Kurulumdan Önce Mevcut Durumu Kontrol Edin

Sisteminizde Python’ın hangi sürümlerinin kurulu olduğunu görmek için önce bir kontrol yapalım:

python3 --version
python3 -V
which python3
ls /usr/bin/python*

Bu komutlar mevcut Python sürümünü ve kurulu olan tüm Python binary’lerini listelemenizi sağlar. Genellikle Ubuntu’da python3.10 veya python3.11 şeklinde sürüme özgü binary’ler /usr/bin/ altında bulunur.

Sisteminizde hangi Python paketlerinin kurulu olduğunu görmek isterseniz:

dpkg -l | grep python3
apt list --installed 2>/dev/null | grep python

Bu adım önemli çünkü sisteminizin bazı kritik bileşenleri (apt, update-manager, vb.) mevcut Python sürümüne bağımlı. Bu yüzden varsayılan python3 sembolik bağlantısını değiştirirken dikkatli olmanız gerekiyor.

Yöntem 1: Deadsnakes PPA ile Kurulum (Önerilen)

En pratik ve güvenilir yöntem, deadsnakes PPA’sını kullanmak. Bu PPA, Ubuntu ekibinde görev yapmış geliştiriciler tarafından yönetiliyor ve güncel Python sürümlerini Ubuntu için derlenmiş olarak sunuyor.

PPA’yı Sisteme Ekleyin

sudo apt update
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update

software-properties-common paketi, PPA ekleme işlemini kolaylaştıran add-apt-repository komutunu sağlıyor. PPA eklendikten sonra mutlaka apt update çalıştırın, aksi takdirde yeni paket listesi yüklenmez.

Python 3.12’yi Kurun

sudo apt install python3.12 python3.12-venv python3.12-dev -y

Burada üç paketi birlikte kuruyoruz:

  • python3.12: Ana Python interpreter’ı
  • python3.12-venv: Sanal ortam oluşturmak için gerekli modül
  • python3.12-dev: C uzantıları geliştirmek veya bazı pip paketlerini derlemek için gerekli başlık dosyaları

Eğer pip kullanacaksanız şunu da ekleyin:

sudo apt install python3.12-distutils -y
curl -sS https://bootstrap.pypa.io/get-pip.py | sudo python3.12

Kurulumun başarılı olduğunu doğrulamak için:

python3.12 --version
# Çıktı: Python 3.12.x

Yöntem 2: Kaynak Koddan Derleme

Bu yöntem daha fazla kontrol sağlar ama zaman alır. Özellikle özelleştirilmiş optimizasyon bayrakları kullanmak istiyorsanız ya da belirli bir production ortamı için hassas kontrol gerekiyorsa bu yola başvurabilirsiniz.

Bağımlılıkları Kurun

sudo apt update
sudo apt install -y build-essential zlib1g-dev libncurses5-dev 
    libgdbm-dev libnss3-dev libssl-dev libreadline-dev 
    libffi-dev libsqlite3-dev wget libbz2-dev 
    liblzma-dev uuid-dev tk-dev

Kaynak Kodu İndirin ve Derleyin

cd /opt
sudo wget https://www.python.org/ftp/python/3.12.3/Python-3.12.3.tgz
sudo tar -xzf Python-3.12.3.tgz
cd Python-3.12.3

sudo ./configure --enable-optimizations --with-ensurepip=install
sudo make -j$(nproc)
sudo make altinstall

--enable-optimizations bayrağı, PGO (Profile Guided Optimization) derlemesini etkinleştirir. Bu sayede %10-15 daha hızlı bir interpreter elde edersiniz ama derleme süresi uzar.

make altinstall kullandığımıza dikkat edin, make install değil. altinstall, python3 veya python sembolik bağlantılarını değiştirmez, yalnızca python3.12 olarak sisteme ekler. Bu sayede mevcut sistem Python’u korunmuş olur.

Derleme tamamlandıktan sonra:

/usr/local/bin/python3.12 --version

update-alternatives ile Sürüm Yönetimi

Birden fazla Python sürümü kurulu olduğunda hangisinin varsayılan olarak kullanılacağını update-alternatives ile yönetebilirsiniz. Ancak burada çok dikkatli olmak lazım.

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 2

Şu anda hangi sürümün aktif olduğunu görmek ve değiştirmek için:

sudo update-alternatives --config python3

Bu komut size interaktif bir menü gösterir. Bir numara girerek istediğiniz sürümü seçebilirsiniz.

Önemli uyarı: Ubuntu’nun sistem araçları (özellikle apt ve gnome-terminal gibi uygulamalar) sistem Python’una bağımlıdır. python3 sembolik bağlantısını değiştirirseniz bazı sistem araçları kırılabilir. Genel tavsiyem, sistem genelinde değişiklik yapmak yerine sanal ortamları kullanmak.

Sanal Ortam Oluşturma ve Yönetimi

Profesyonel Python geliştirmenin temel taşı sanal ortamlardır. Her proje için bağımsız bir Python ortamı oluşturmak, bağımlılık çakışmalarını önlemenin en iyi yoludur.

Python 3.12 ile Sanal Ortam Oluşturun

# Proje dizini oluşturun
mkdir ~/projects/myapp
cd ~/projects/myapp

# Python 3.12 ile sanal ortam oluşturun
python3.12 -m venv .venv

# Sanal ortamı aktif edin
source .venv/bin/activate

# Aktif ortamı doğrulayın
python --version
which python
pip --version

Sanal ortam aktifleştirildikten sonra python komutu doğrudan Python 3.12’yi işaret eder. Bu durum yalnızca aktif terminal oturumu için geçerlidir.

pip’i Güncel Tutun

# Sanal ortam aktifken
pip install --upgrade pip setuptools wheel

Her yeni sanal ortamda bunu yapmayı alışkanlık edinmenizi öneririm. Eski pip sürümleri bazı modern paketleri kurarken sorun çıkarabiliyor.

Gerçek Dünya Senaryosu: Django Projesi Kurulumu

Diyelim ki Python 3.12 üzerinde yeni bir Django projesi başlatıyorsunuz:

# Proje dizini ve sanal ortam
mkdir ~/projects/django_app
cd ~/projects/django_app
python3.12 -m venv .venv
source .venv/bin/activate

# Django ve temel bağımlılıkları kur
pip install django==5.0 djangorestframework psycopg2-binary

# Kurulu paketleri requirements.txt'e aktar
pip freeze > requirements.txt

# Yeni Django projesi oluştur
django-admin startproject config .

# Sunucuyu başlat
python manage.py runserver

requirements.txt dosyası, projenizin başka bir ortamda veya sunucuda kurulabilmesi için kritik önem taşır. Her yeni bağımlılık ekledikten sonra pip freeze > requirements.txt çalıştırın.

Başka bir ortamda aynı bağımlılıkları kurmak için:

python3.12 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

pyenv ile Gelişmiş Sürüm Yönetimi

Birden fazla Python sürümüyle çalışıyorsanız ve her proje için farklı sürüm gereksinimi varsa, pyenv bu işi çok kolaylaştırıyor. Özellikle geliştirme makinelerinde pyenv + virtualenv kombinasyonu altın standart haline geldi.

# pyenv kurulumu
curl https://pyenv.run | bash

# Shell konfigürasyonuna ekleyin (~/.bashrc veya ~/.zshrc)
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc

# Değişiklikleri uygulayın
source ~/.bashrc

# Python 3.12 kurulumu
pyenv install 3.12.3

# Belirli bir proje için Python sürümü belirleyin
cd ~/projects/myapp
pyenv local 3.12.3

# Global Python sürümünü ayarlayın (sistem geneli değil, kullanıcı bazlı)
pyenv global 3.12.3

# Mevcut sürümleri listeleyin
pyenv versions

pyenv local komutu, proje dizinine .python-version adlı bir dosya oluşturur. Bu dizine girdiğinizde pyenv otomatik olarak doğru Python sürümüne geçiş yapar. Bu özellik ekip çalışmasında da son derece kullanışlı, çünkü .python-version dosyasını git reposuna dahil edebilirsiniz.

Sistemin Python’unu Koruma Stratejisi

Ubuntu sistem araçlarının kırılmaması için şu kurallara uymak gerekiyor:

  • Sistem Python’una (/usr/bin/python3) asla doğrudan pip ile paket kurmayın
  • sudo pip install komutunu hiçbir zaman çalıştırmayın
  • Sistem genelinde paket kurmak gerekiyorsa apt üzerinden yapın
  • Her proje için ayrı sanal ortam kullanın

pip ile sistem genelinde paket kurma girişiminde bulunduğunuzda Python 3.12 sizi uyarır:

error: externally-managed-environment

Bu hata mesajı aslında bir hata değil, bir güvenlik önlemi. Sistem Python’unun bütünlüğünü koruyor. Bu uyarıyı --break-system-packages bayrağıyla geçersiz kılabilirsiniz ama bunu yapmanızı kesinlikle önermiyorum.

Python 3.12 ile Bazı Uyumluluk Notları

Python 3.12’ye geçerken dikkat etmeniz gereken bazı noktalar var.

Kaldırılan özellikler ve değişiklikler:

  • distutils modülü tamamen kaldırıldı: setuptools kullanımına geçin
  • asynchat ve asyncore modülleri kaldırıldı: asyncio kullanın
  • imghdr, sndhdr, sunau modülleri kaldırıldı: Alternatif kütüphanelere bakın
  • pkgutil.find_loader() deprecated: importlib.util.find_spec() kullanın

Mevcut bir projeyi Python 3.12’ye taşıyorsanız, önce pip install pyupgrade ile kodu otomatik güncelleyebilir, ardından pip install pylint veya mypy ile olası sorunları tespit edebilirsiniz.

# Sanal ortamda uyumluluk kontrol araçları
pip install pyupgrade mypy pylint

# Proje dizinindeki Python dosyalarını kontrol et
mypy src/
pylint src/

Jupyter Notebook ile Python 3.12

Veri bilimi veya araştırma yapıyorsanız Jupyter Notebook’u Python 3.12 kernel’iyle kullanmak isteyebilirsiniz:

# Sanal ortam oluştur
python3.12 -m venv ~/venvs/datascience
source ~/venvs/datascience/bin/activate

# Jupyter ve temel veri bilimi paketlerini kur
pip install jupyter numpy pandas matplotlib scikit-learn

# Kernel'i Jupyter'a kaydet
python -m ipykernel install --user --name=python312 --display-name="Python 3.12"

# Jupyter'ı başlat
jupyter notebook

Bu işlemden sonra Jupyter arayüzünde yeni bir notebook oluştururken “Python 3.12” seçeneğini göreceksiniz. Böylece farklı projeler için farklı Python sürümlerini aynı Jupyter kurulumundan kullanabilirsiniz.

Otomatik Sanal Ortam Aktivasyonu

Bir proje dizinine girdiğinizde sanal ortamın otomatik aktif olmasını istiyorsanız .bashrc veya .zshrc dosyanıza şu fonksiyonu ekleyebilirsiniz:

# ~/.bashrc sonuna ekleyin
auto_activate_venv() {
    if [ -f ".venv/bin/activate" ]; then
        source .venv/bin/activate
    fi
}

cd() {
    builtin cd "$@"
    auto_activate_venv
}

Bu fonksiyon, cd komutunu override ederek her dizin değişikliğinde .venv klasörü olup olmadığını kontrol eder. Varsa otomatik olarak aktif eder. Basit ama iş hayatında ciddi zaman kazandıran bir konfigürasyon.

Sonuç

Ubuntu’da Python 3.12 kurulumu ve yönetimi aslında göründüğünden çok daha az karmaşık. Önemli olan doğru araçları doğru amaçlar için kullanmak. Günlük geliştirme için deadsnakes PPA üzerinden kurulum ve sanal ortam kombinasyonu çoğu durumda yeterli. Birden fazla sürümle yoğun çalışıyorsanız pyenv’i sisteminize entegre etmek uzun vadede büyük kolaylık sağlıyor.

En kritik kural şu: sistem Python’una dokunmayın. Ubuntu’nun temel araçları bu Python’a bağımlı ve bir kere kırıldığında düzeltmek ciddi vakit kaybına yol açıyor. Her proje için izole bir sanal ortam oluşturma alışkanlığı edinin, requirements.txt dosyalarını güncel tutun ve sürüm geçişlerinde uyumluluk kontrollerini ihmal etmeyin. Bu üç kurala uyduğunuzda Python sürüm yönetimi hiçbir zaman baş ağrısı olmaktan çıkıyor.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir