İçeriğe geç

Linux'a Python Kurulumu: Ubuntu, Fedora, Arch, Alpine ve Kaynaktan Derleme

Linux'ta Python kurmak hem en kolay hem en kafa karıştırıcı yol. Sistem zaten bir python3 ile geliyor ama bu seninki değil. Bu derste Ubuntu/Debian, Fedora, Arch ve Alpine için adım adım, sonra kaynaktan derlemeyi (./configure --enable-optimizations) öğreniyoruz. VPS'e deploy senaryosuna kadar uçuyoruz.

Şükrü Yusuf KAYA
22 dakikalık okuma
Başlangıç
Linux'a Python Kurulumu: Ubuntu, Fedora, Arch, Alpine ve Kaynaktan Derleme
🐧 Linux dersi — neden 'en uzun' kurulum dersi?
Linux dünyasında bir tek dağıtım yok; Ubuntu, Debian, Fedora, RHEL/CentOS, Arch, openSUSE, Alpine, Manjaro... Her birinin paket yöneticisi farklı (apt, dnf, pacman, apk, zypper). Üstelik sunucularda — özellikle Docker container'larında — sıkça farklı dağıtım kullanırsın. Bu yüzden Linux kurulum dersi 'en kolay' olduğu kadar 'en geniş' olmak zorunda. Hadi başlayalım.

Linux Python ile en yakın arkadaş#

Eğer "neden bu dersin macOS dersi kadar uzun?" diye düşünüyorsan, küçük bir gerçek payı vereyim: Python ekosistemi büyük ölçüde Linux'ta yaşıyor. Bunun sebebi:
  • Sunucuların %96+'sı Linux. Web uygulaman, AI servisin, cron job'ın — neredeyse her zaman Linux'ta çalışacak. Geliştirme makinen Windows/Mac olabilir ama prodüksiyon Linux.
  • Docker container'larının %99+'ı Linux tabanlı. Python paketlerken Alpine veya Debian-slim image kullanırsın.
  • Bilim/AI sunucuları Linux. NVIDIA driver'ları, CUDA, en performanslı Python build'leri Linux'ta.
  • Açık kaynak topluluğu Linux merkezli. Stack Overflow'da bir hata mesajını arattığında çıkan çoğu çözüm Linux komutu içerir.
Kısacası: Linux'a Python kurmayı bilmek — geliştirici olarak vazgeçilmez. Bu ders Windows/macOS dersinden daha uzun çünkü gerçek hayat kullanımı daha geniş.

"Zaten python3 var, ne yapayım?"#

Hemen hemen her modern Linux dağıtımı pre-installed bir Python ile gelir. Ubuntu 22.04'te Python 3.10, Ubuntu 24.04'te Python 3.12, Debian 12'de 3.11, Fedora 40'ta 3.12... Her dağıtımın bir "varsayılan Python sürümü" vardır.
Bu system Python'dur. Tıpkı macOS'ta olduğu gibi:
  • Sistemin kendisi (paket yöneticisi, bazı yardımcı araçlar) bu Python'a bağlı.
  • Sen ona doğrudan paket yüklemeye kalkışırsan ileride sistemin kafası karışabilir.
  • Üstelik ne zaman güncellenir sorusu dağıtımın sürüm politikasına bağlı — yıllarca eski sürümle takılı kalabilirsin.
Ubuntu 22.04 LTS Python 3.10 ile geliyor; bu LTS 2027'ye kadar destekli. Yani 2026'da hâlâ Python 3.10 kullanıyor olabilirsin — modern özelliklerden (3.11 hızı, 3.12 type syntax, 3.13 no-GIL) yoksun.
Çözüm: Ya deadsnakes PPA (Ubuntu için) ya da kaynaktan derleme ya da pyenv kullanırsın. Hepsini göreceğiz.
Önemli kural:
sudo pip install
asla yapma. Sistem Python'a paket eklemeye çalışırsan, dağıtımın paket yöneticisi (apt) ile çakışır. Yıllar içinde gördüğüm en sık "neden bilgisayarım bozuldu" sebeplerinden biri bu.
⚠️ PEP 668 ve 'externally-managed-environment' hatası
Modern Linux dağıtımları (Ubuntu 23.04+, Debian 12+, Fedora 38+) artık 'PEP 668' uyumlu. Yani
pip install
yaparsan şu hatayı alıyorsun:
error: externally-managed-environment × This environment is externally managed
Bu Linux'un sana 'sistem Python'una el sürme!' demesi. Çözüm: virtualenv kullan (ileride göreceğiz) ya da kendi Python kurulumunu yap (bu derste). Eskiden bu uyarı yoktu, çoğu kişi farkında olmadan sistemini bozuyordu — şimdi engelliyor. İyi bir gelişme.
Ubuntu 22.04, 24.04, Debian 12, 13 için.

Sistem Python'unu kontrol et#

python3 --version # Çıktı örneği: # Python 3.10.12 (Ubuntu 22.04) # Python 3.12.3 (Ubuntu 24.04) # Python 3.11.2 (Debian 12)

Yardımcı paketleri kur#

Linux'ta Python kurmadan önce build dependencies kurmak iyi pratiktir; ileride kaynaktan paket derleyeceğin durumlarda sorun yaşamazsın:
sudo apt update sudo apt install -y \ build-essential libssl-dev libffi-dev \ libbz2-dev libsqlite3-dev libreadline-dev \ zlib1g-dev liblzma-dev libncurses-dev \ tk-dev libgdbm-dev libnss3-dev wget curl
Bu paketler Python'un standart kütüphanesinin tam çalışması için gerekli (sqlite3 modülü, ssl modülü, vb.).

deadsnakes PPA ile yeni sürüm#

deadsnakes PPA, Felix Krull adlı bir geliştiricinin Ubuntu için sağladığı resmi olmayan ama güvenilir Python paketleri. Eski/yeni Python sürümlerine bu yolla erişebilirsin:
# Repository ekle sudo add-apt-repository ppa:deadsnakes/ppa sudo apt update # İstediğin sürümü yükle sudo apt install -y python3.13 python3.13-venv python3.13-dev # Doğrula python3.13 --version # Çıktı: Python 3.13.0
Not:
-venv
paketi virtualenv için,
-dev
paketi C extension'lar derlemek için lazım. İkisini de mutlaka kur.

pip'i ekle#

Ayrıca pip default kurulmuyor:
sudo apt install -y python3.13-distutils curl -sS https://bootstrap.pypa.io/get-pip.py | python3.13 # Doğrula python3.13 -m pip --version
Artık
python3.13
ve
python3.13 -m pip
ile çalışabilirsin.

Kaynaktan derleme — "asıl Python kullanıcısı" yolu#

Her dağıtım kendi paketini sunsa da, istediğin tam sürümü, optimize edilmiş şekilde istersen kaynaktan derlemek seçenektir. pyenv aslında perde arkasında bunu yapıyor — sen elinle yapmadan önce ne olup bittiğini anlamak iyi olur.
Avantajları:
  • Hangi sürüm istiyorsan (3.13.1, 3.12.7, 3.11.10 — fark etmez)
  • Optimizasyon flag'leri kullanabilirsin (
    --enable-optimizations
    ile %10-20 hız)
  • Sistem Python'una hiç dokunmuyorsun
  • Herhangi bir dizine kurabilirsin (
    /opt/python313/
    gibi)
Dezavantajları:
  • 5-10 dakika sürer (PGO build'lerde 20+ dakika)
  • Build dependencies gerekli
  • Update'i sen yapmak zorundasın
Aşağıda production-quality bir kurulum yapacağız.
bash
# Ubuntu/Debian build dependencies (full liste)
sudo apt update
sudo apt install -y \
build-essential gdb lcov pkg-config \
libbz2-dev libffi-dev libgdbm-dev libgdbm-compat-dev liblzma-dev \
libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev \
lzma lzma-dev tk-dev uuid-dev zlib1g-dev wget
 
# Fedora/RHEL build dependencies
sudo dnf install -y \
gcc gcc-c++ make git wget \
bzip2-devel openssl-devel libffi-devel \
sqlite-devel readline-devel zlib-devel \
tk-devel ncurses-devel gdbm-devel \
xz-devel uuid-devel
 
# Arch
sudo pacman -S --needed base-devel openssl libffi sqlite zlib
Her dağıtım için build dependencies. Bu paketleri kurmadan derleme yarıda kalır.

Adım adım kaynaktan derleme#

1. İndirme#

# /tmp altında çalış (otomatik temizlenir) cd /tmp # Sürümü tarafımdan tutucu bir değişkende PYVER="3.13.0" # Kaynak kodu indir wget https://www.python.org/ftp/python/$PYVER/Python-$PYVER.tgz # Tarball'ı aç tar -xzf Python-$PYVER.tgz cd Python-$PYVER

2. Configure#

# Production kalitesi configure ./configure \ --prefix=/opt/python313 \ --enable-optimizations \ --enable-shared \ --with-system-ffi \ --with-computed-gotos \ --with-lto \ --with-ssl-default-suites=openssl
Önemli flag'leri açıklayayım:
  • --prefix=/opt/python313
    : Nereye kurulacak.
    /usr/local/
    default ama sistem Python'un yanına gitmek istemeyiz.
  • --enable-optimizations
    : PGO (Profile-Guided Optimization) açar. Yorumlayıcının kullanım pattern'ini ölçüp ona göre optimize ediyor. +%10-20 hız, ama build süresi 3-4 katına çıkıyor.
  • --enable-shared
    :
    libpython.so
    shared library oluştur — bazı extension'lar bunu istiyor.
  • --with-lto
    : Link-Time Optimization. Ekstra %5 hız.
  • --with-system-ffi
    : Sistemin libffi'sini kullan (kurulumda kurduğumuz
    libffi-dev
    ).

3. Make#

# CPU sayısı kadar paralel derle (-j parametresi) make -j $(nproc) # Beklenen süre: # 2-core: 5-8 dakika # 4-core: 3-5 dakika # 8-core: 2-3 dakika # (PGO ile 2-3 katı)
make
aşamasında binlerce satırlık compiler çıktısı akacak. Endişelenme, bu normal. Hata varsa kırmızıyla yazar ve durur.

4. Test (opsiyonel ama önerilen)#

# Self-test (5-10 dakika) make test
Tests result: SUCCESS
görüyorsan derleme sağlam.

5. Install#

# /opt/python313 altına kur (root yetkisi) sudo make altinstall
🚨 Çok önemli:
make install
değil,
make altinstall
kullan. Aralarındaki fark:
  • make install
    /opt/python313/bin/python
    ve
    /opt/python313/bin/python3
    ikisini de oluşturur. Eğer prefix
    /usr/local
    ise sistem Python'unu üzerine yazabilir.
  • make altinstall
    → sadece
    /opt/python313/bin/python3.13
    oluşturur. Sürüm-spesifik link.
altinstall = "alt install" yani alternatif. Default sürümünü ezmek istemiyorsan.

6. PATH'e ekleme#

# .bashrc veya .zshrc'ye ekle echo 'export PATH="/opt/python313/bin:$PATH"' >> ~/.bashrc source ~/.bashrc # Doğrula python3.13 --version which python3.13 # /opt/python313/bin/python3.13

7. pip kurulumu#

# Kaynaktan derlenen Python'a pip eklemek için python3.13 -m ensurepip --upgrade python3.13 -m pip install --upgrade pip # Doğrula python3.13 -m pip --version
Tebrikler — kaynaktan optimize Python'un var.
💡 PGO + LTO ne kadar fark eder?
Pratik benchmark: pure-Python bir simülasyon scripti, 3.12 default Ubuntu paket sürümünde 12.4 saniyede bitiyordu. Aynı script,
--enable-optimizations --with-lto
ile derlenmiş 3.12'de 9.8 saniye. Yani %20+ kazanç. Production sunucularda fark eder; geliştirme makinelerinde fark daha az hissedilir. Eğer CPython ile yoğun saf-Python iş yapıyorsan ve hız önemliyse — PGO build'e değer.

Birden fazla sürümü yan yana kullanma —
update-alternatives
#

Linux'a birden fazla Python sürümü kurduğunda, "default" hangisi? Ubuntu/Debian'da bunun için update-alternatives sistemi var.
# 3 farklı Python sürümünü kayıt et sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.12 2 sudo update-alternatives --install /usr/bin/python python /opt/python313/bin/python3.13 3 # Hangisi aktif şu an update-alternatives --display python # Default'u değiştir (interaktif menü) sudo update-alternatives --config python # Karşına çıkacak: # Selection Path Priority Status # ------------------------------------------------------------ # * 1 /usr/bin/python3.10 1 auto mode # 2 /usr/bin/python3.12 2 manual mode # 3 /opt/python313/bin/python3.13 3 manual mode # Press <enter> to keep the current choice[*], or type selection number:
Bu sistem güçlü ama biraz manuel. Sonraki ders'te göreceğimiz pyenv çok daha temiz bir alternatif.

Gerçek senaryo: VPS'e Python ile uygulama deploy#

Hayatın bir gün bunu yapmanı gerektirebilir. DigitalOcean, Hetzner, AWS Lightsail — bir Linux VPS aldın, Python bir uygulamanı deploy ediyorsun. Adım adım gerçek bir sequence:
# 1. Sunucuya bağlan ssh user@your-vps-ip # 2. Sistem güncel mi sudo apt update && sudo apt upgrade -y # 3. Build dependencies sudo apt install -y build-essential libssl-dev libffi-dev \ libbz2-dev libsqlite3-dev libreadline-dev zlib1g-dev \ liblzma-dev libncurses-dev tk-dev libgdbm-dev wget curl git # 4. deadsnakes ile yeni Python (kolay yol) sudo add-apt-repository ppa:deadsnakes/ppa sudo apt update sudo apt install -y python3.13 python3.13-venv python3.13-dev # 5. Uygulama için system user sudo useradd -r -m -s /bin/bash myapp sudo su - myapp # 6. Uygulama dizini mkdir ~/app && cd ~/app git clone https://github.com/me/myapp.git . # 7. Virtualenv (her uygulama için ayrı!) python3.13 -m venv venv source venv/bin/activate # 8. Bağımlılıklar pip install -r requirements.txt # 9. systemd servisi (root olarak) exit # myapp user'dan çık sudo nano /etc/systemd/system/myapp.service
Bu
.service
dosyasının içeriği şöyle olur:
[Unit] Description=My Python App After=network.target [Service] Type=simple User=myapp WorkingDirectory=/home/myapp/app Environment="PATH=/home/myapp/app/venv/bin" ExecStart=/home/myapp/app/venv/bin/python main.py Restart=on-failure [Install] WantedBy=multi-user.target
# 10. Etkinleştir + başlat sudo systemctl daemon-reload sudo systemctl enable myapp sudo systemctl start myapp # 11. Logları izle sudo journalctl -u myapp -f
İşte gerçek bir Linux Python deploy. Bu pattern bütün ileri Python projelerinin temeli — ileride FastAPI/Django uygulamalarını da bu şablonla deploy edeceğiz.
dockerfile
# Multi-stage Docker build — production-ready Python image
# Bu yaklaşımı bütün ciddi Python projelerinde kullanacaksın.
 
# Stage 1: Builder
FROM python:3.13-slim AS builder
 
# Build dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
gcc \
&& rm -rf /var/lib/apt/lists/*
 
WORKDIR /build
 
# Sadece requirements'i kopyala (cache layer için)
COPY requirements.txt .
RUN pip install --user --no-warn-script-location -r requirements.txt
 
# Stage 2: Runtime (slim, minimal)
FROM python:3.13-slim
 
# Non-root user (güvenlik)
RUN useradd -m -r appuser
USER appuser
WORKDIR /home/appuser/app
 
# Builder'dan paketleri al
COPY --from=builder --chown=appuser:appuser /root/.local /home/appuser/.local
 
# PATH'e user-local pip ekle
ENV PATH=/home/appuser/.local/bin:$PATH
 
# Uygulama kodu
COPY --chown=appuser:appuser . .
 
# Healthcheck
HEALTHCHECK --interval=30s --timeout=3s \
CMD python -c "import requests; requests.get('http://localhost:8000/health')" || exit 1
 
CMD ["python", "main.py"]
Multi-stage Docker build — küçük image, build artifact'leri runtime'a sızdırma, non-root user. Bunu ezberle, birgün lazım olacak.
Sebep: Python kaynaktan derlenirken
libssl-dev
(Ubuntu) veya
openssl-devel
(Fedora) eksik. SSL modülü compile edilememiş.
Çözüm:
# Ubuntu sudo apt install -y libssl-dev # Fedora sudo dnf install -y openssl-devel
Sonra Python'u yeniden derle (
./configure && make && make altinstall
).

Pratik egzersiz — kendi build'ini yap#

Bu derste öğrendiklerini denemek için aşağıdaki sequence'i bir Linux makinede (ya da WSL'de) gerçekten çalıştır:
  1. Build deps'leri kur (yukarıdaki listeden senin dağıtımına uygun olanı)
  2. Python 3.13 kaynak kodunu indir (
    wget https://www.python.org/ftp/python/3.13.0/Python-3.13.0.tgz
    )
  3. Configure et (
    --enable-optimizations
    ve
    --with-lto
    ile)
  4. make + make altinstall
  5. Bir test yap:
    python3.13 -c "import sys; print(sys.version)"
  6. Built-in modülleri kontrol et:
python3.13 -c " import sys, ssl, sqlite3, hashlib, ctypes, zlib, bz2, lzma print('SSL:', ssl.OPENSSL_VERSION) print('SQLite:', sqlite3.sqlite_version) print('Python:', sys.version) "
Hepsi import edilebiliyorsa — tebrikler, build sağlam. Eksik bir tane varsa, o modülün C dependency'si build dependencies'te yoktu demektir; troubleshooting'e bak.
Bu egzersizi bir gerçek Linux makinede yapmak senin için çok kıymetli olacak — hem Linux'a hem Python'un internal yapısına farklı bir bakış kazanacaksın.

Bu derste neler kazandın?#

✓ Linux'un Python ile derin tarihsel ilişkisi — sunucu, AI, Docker dünyalarının tamamı Linux odaklı.
System Python'a neden dokunmamak gerektiği — PEP 668 ve "externally-managed-environment" hatası.
5 farklı dağıtım için kurulum (Ubuntu/Debian, Fedora/RHEL, Arch, Alpine, openSUSE).
deadsnakes PPA ile Ubuntu'ya yeni sürümleri getirme.
Kaynaktan derleme
./configure --enable-optimizations
'tan
make altinstall
'a tüm akış. PGO + LTO'nun pratik faydası (~%20 hız).
update-alternatives ile birden fazla sürümü yan yana yönetme.
VPS deploy senaryosu — git clone + venv + systemd.
Docker multi-stage build ile production-ready Python image.
7 yaygın hata ve çözümleri.
Sıradaki ders: pyenv. Bu derste manuel update-alternatives ile yaptıklarımızı, pyenv tek komutla yapıyor. Ayrıca
.python-version
dosyası ile proje-bazlı sürüm seçimi, virtualenv plugin entegrasyonu, ve "10 farklı projede 10 farklı Python" senaryosu — hepsi rahatça yönetilebilir hale gelecek.

Sık Sorulan Sorular

Evet, kesinlikle. WSL2 gerçek bir Linux çekirdeği üzerinde çalışıyor; Ubuntu, Debian, Alpine — ne yüklediysen o dağıtımın komutları geçerli. Bu dersin tüm `apt`/`dnf`/`pacman` komutları WSL'de aynen çalışıyor. Hatta Windows kullanıcısı için WSL'de Linux Python = en iyi geliştirme deneyimi diyebilirim — Windows'taki PATH/encoding garabetleriyle uğraşmazsın.

Yorumlar & Soru-Cevap

(0)
Yorum yazmak için giriş yap.
Yorumlar yükleniyor...

İlgili İçerikler