Ubuntu 24.04 VPS'te Python, pip ve sanal ortamlar

2 min
VPS/VDS Hosting

Ubuntu 24.04 Python 3.12 ile gelir, ancak düz pip ile paket kurmak artık «externally-managed-environment» hatası verir. Çözüm, her projeyi kendi sanal ortamında yalıtmaktır. Bu rehber VPS Linux Infrawire sunucunuzu nasıl hazırlayacağınızı, bağımlılıkları düzgün nasıl yöneteceğinizi ve bir uygulamayı systemd servisi olarak nasıl çalışır tutacağınızı gösterir.

📋 Ön koşullar

  • Ubuntu 24.04 veya Debian 12 çalıştıran, root SSH erişimli bir VPS (IP adresi ve root parolası müşteri alanınızda yer alır)
  • Bir Python projesi veya denemek için basit bir betik
  • Temel komut satırı bilgisi

1. Python 3, pip ve venv kurulumu

Python 3 genellikle önceden kuruludur, ancak pip ve venv modülü ayrı paketlerdir.

Bash
apt update apt install -y python3 python3-pip python3-venv python3-dev build-essential python3 --version pip3 --version

2. PEP 668 hatasını anlama

Ubuntu 24.04 veya Debian 12'de root olarak pip install requests çalıştırınca şu çıktı gelir:

TEXT
error: externally-managed-environment

Bu koruma (PEP 668), pip'in apt tarafından yönetilen dosyaların üzerine yazıp sistem araçlarını bozmasını engeller. --break-system-packages ile aşmayın. Aşağıdaki üç temiz yoldan birini kullanın.

3. Sanal ortam oluşturma

Sanal ortam, tek bir proje için Python ve pip'in özel bir kopyasıdır.

Bash
mkdir -p /opt/myapp && cd /opt/myapp python3 -m venv venv source venv/bin/activate pip install --upgrade pip pip install requests flask gunicorn

İstem artık (venv) ile başlar. Ortamdan deactivate ile çıkarsınız.

4. requirements.txt ile bağımlılıkları yönetme

Projeyi başka bir sunucuda birebir yeniden kurabilmek için tam sürümleri sabitleyin.

Bash
pip freeze > requirements.txt # Yeni bir makinede python3 -m venv venv source venv/bin/activate pip install -r requirements.txt

5. pipx ile komut satırı araçları kurma

Bağımsız araçlar (httpie, yt-dlp, black...) için pipx her birine gizli bir sanal ortam verir ve komutu genel olarak erişilebilir kılar.

Bash
apt install -y pipx pipx ensurepath pipx install httpie

Güncellenen PATH yüklensin diye ardından yeni bir kabuk açın. Debian paketi bulunan bir kütüphane için apt install python3-requests de geçerli bir seçimdir.

6. Uygulamayı systemd servisi olarak çalıştırma

Ayrıcalıksız özel bir kullanıcı oluşturun, ardından sanal ortamdaki yorumlayıcıyı başlatan bir unit yazın (burada app.py içindeki app adlı Flask nesnesini sunan Gunicorn).

Bash
useradd --system --home /opt/myapp --shell /usr/sbin/nologin myapp chown -R myapp:myapp /opt/myapp

/etc/systemd/system/myapp.service dosyasını oluşturun:

INI
1[Unit] 2Description=My Python application 3After=network.target 4 5[Service] 6User=myapp 7WorkingDirectory=/opt/myapp 8ExecStart=/opt/myapp/venv/bin/gunicorn --bind 127.0.0.1:8000 app:app 9Restart=on-failure 10RestartSec=5 11 12[Install] 13WantedBy=multi-user.target
Bash
systemctl daemon-reload systemctl enable --now myapp

Uygulamayı internete açmak için 8000 portunun önüne nginx gibi bir ters vekil koyun.

✅ Doğrulama

Bash
which python # etkinleştirildiğinde /opt/myapp/venv içini göstermeli pip list systemctl status myapp --no-pager journalctl -u myapp -n 50 --no-pager curl -I http://127.0.0.1:8000

🔧 Sorun giderme

The virtual environment was not created successfully because ensurepip is not available : venv paketi eksik. apt install python3-venv (veya python3.12-venv) ile kurun ve komutu yeniden çalıştırın.

systemd'de status=203/EXEC : ExecStart içindeki yol yanlış ya da dosya servis kullanıcısı tarafından çalıştırılamıyor. ls -l /opt/myapp/venv/bin/gunicorn ile ve daha önce ayarlanan sahiplikle kontrol edin.

ModuleNotFoundError yalnızca systemd altında : servis sanal ortam yerine sistem Python'unu kullanıyor. ExecStart içinde her zaman /opt/myapp/venv/bin/python ya da venv/bin altındaki ikili dosyayı çağırın.

pip: command not found : python3 -m pip kullanın veya önce sanal ortamı etkinleştirin.


🎉 Python projeleriniz artık yalıtılmış, tekrarlanabilir ve güvenilir bir servis olarak çalışıyor!

En yeni teklifler, indirimler ve özel promosyonlardan haberdar olun.

Promosyonları gör

Çerez kullanıyoruz

Sitemizdeki deneyiminizi iyileştirmek için analiz çerezleri kullanıyoruz. Hiçbir veri üçüncü taraflara satılmaz. Daha fazlasını şurada öğrenin: gizlilik politikası.