Bloga geri dön

PyPI için Proxy: Engellenmiş Bölgelerde pip ile Python Paketleri Nasıl Kurulur

Eğer pip, bölgenizdeki PyPI engeli nedeniyle paketleri indiremiyorsa, bu makale kesintisiz çalışma için proxy ve aynaların nasıl ayarlanacağını gösterecektir.

📅20 Temmuz 2026
```html

PyPI — Python paketlerinin ana deposu — bazı ülkelerde ve kurumsal ağlarda periyodik olarak engellenmektedir. Eğer pip install donuyorsa veya bağlantı hatası veriyorsa, sorun tam olarak budur. Bu makalede, ortam değişkenlerinden aynalara ve Docker konteynerlerine kadar tüm çalışır yöntemleri inceleyeceğiz.

Neden PyPI erişilemez: engelleme nedenleri

Proxy ayarlamadan önce, hangi tür engelleme ile karşılaştığınızı anlamak önemlidir. Bu, çözüm seçimini etkiler.

Bölgesel engellemeler

Bazı ülkelerde (İran, Çin, Rusya'nın bazı bölgeleri yaptırım dönemlerinde) pypi.org ve files.pythonhosted.org erişimi sağlayıcı veya devlet güvenlik duvarı seviyesinde engellenmektedir. pip install requests komutu sadece donuyor veya ConnectionError hatası veriyor.

Kurumsal proxy ve güvenlik duvarları

Birçok şirket, tüm çıkış trafiğini kurumsal bir proxy sunucusu üzerinden yönlendirir. Eğer pip bu proxy'den haberdar değilse, doğrudan bağlanmaya çalışır ve bağlantı reddedilir. Bu durumda tipik hata: ProxyError: HTTPSConnectionPool(host='pypi.org', port=443).

İnternete çıkışı olmayan sunucular (air-gapped)

Üretim sunucuları, bankalardaki sunucular, devlet kurumları veya izole edilmiş bulut VPC'lerde genellikle doğrudan internete erişim yoktur. Burada ya ağ içinde bir proxy sunucusu ya da yerel bir PyPI aynası gereklidir.

Geçici kesintiler ve rate-limiting

Bazen PyPI, bir IP'den gelen istek sayısını sınırlar — özellikle birden fazla Docker konteyneri aynı anda başlatıyorsanız. Bu durumda IP rotasyonu yapan bir proxy sorunu çözer.

PyPI'nin engellenip engellenmediğini nasıl kontrol edebilirim?

Terminalde şu komutu çalıştırın: curl -v https://pypi.org/simple/. Eğer bağlantı donuyorsa veya SSL/timed out hatası veriyorsa — PyPI sizin IP'nizden erişilemez. Eğer hata 407 Proxy Authentication Required kelimesini içeriyorsa — kurumsal bir proxy arkasındasınız demektir.

Ortam değişkenleri: en hızlı yol

En basit ve evrensel yol, standart ortam değişkenleri HTTP_PROXY ve HTTPS_PROXY ayarlamaktır. Pip, diğer birçok Python kütüphanesi (requests, urllib3) gibi, bunları otomatik olarak alır ve ek bir ayar gerektirmez.

Linux ve macOS

# Kimlik doğrulama olmadan
export HTTP_PROXY="http://1.2.3.4:8080"
export HTTPS_PROXY="http://1.2.3.4:8080"

# Kullanıcı adı ve şifre ile
export HTTP_PROXY="http://user:[email protected]:8080"
export HTTPS_PROXY="http://user:[email protected]:8080"

# SOCKS5 proxy
export HTTP_PROXY="socks5://user:[email protected]:1080"
export HTTPS_PROXY="socks5://user:[email protected]:1080"

# Şimdi paketi kuruyoruz
pip install requests

Her seferinde komutları girmek istemiyorsanız, bu satırları ~/.bashrc veya ~/.zshrc dosyasına ekleyin.

Windows (PowerShell)

# Geçici (sadece mevcut oturum için)
$env:HTTP_PROXY = "http://user:[email protected]:8080"
$env:HTTPS_PROXY = "http://user:[email protected]:8080"

# Kalıcı (tüm oturumlar için)
[System.Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://user:[email protected]:8080", "User")
[System.Environment]::SetEnvironmentVariable("HTTPS_PROXY", "http://user:[email protected]:8080", "User")

Windows (cmd)

set HTTP_PROXY=http://user:[email protected]:8080
set HTTPS_PROXY=http://user:[email protected]:8080
pip install numpy

Dikkat: Eğer şifrede özel karakterler varsa (@, #, %), bunları URL kodlaması yapmalısınız. Örneğin, @ karakteri %40 olur.

--proxy bayrağı doğrudan pip'te

Eğer sadece bir komut için proxy kullanmanız gerekiyorsa, global ayarları değiştirmeden:

pip install pandas --proxy http://user:[email protected]:8080

# SOCKS5 için pysocks paketi gereklidir
pip install pysocks
pip install scikit-learn --proxy socks5://user:[email protected]:1080

pip.conf ve pip.ini üzerinden proxy ayarlama

Eğer proxy'nin her pip çalıştırıldığında otomatik olarak kullanılmasını istiyorsanız — manuel ortam değişkeni ayarlamadan — bunu pip'in yapılandırma dosyasına yazmalısınız.

Yapılandırma dosyalarının konumu

OS Dosya yolu Kapsam
Linux / macOS ~/.config/pip/pip.conf Geçerli kullanıcı
Linux / macOS /etc/pip.conf Sistem genelindeki tüm kullanıcılar
Windows %APPDATA%\pip\pip.ini Geçerli kullanıcı
Herhangi bir OS ./pip.conf (proje klasöründe) Sadece geçerli proje

pip.conf dosyasının içeriği

[global]
proxy = http://user:[email protected]:8080

# SSL doğrulamasını atlamak gerekiyorsa (üretimde önerilmez)
# trusted-host = pypi.org
#                files.pythonhosted.org

Dosyayı kaydettikten sonra, tüm sonraki pip install çağrıları belirtilen proxy'yi otomatik olarak kullanacaktır. Mevcut yapılandırmayı kontrol etmek için şu komutu kullanabilirsiniz:

pip config list
pip config debug  # tüm yapılandırma dosyalarını ve önceliklerini gösterir

PyPI için hangi proxy türünü seçmeli

Tüm proxy'ler PyPI ile çalışmak için eşit derecede uygun değildir. Seçim, engelleme nedenine ve altyapınıza bağlıdır.

Proxy türü Hız Güvenilirlik En iyi senaryo
Veri merkezi ⚡ Yüksek Orta Kurumsal ağlar, CI/CD, büyük paketlerin indirilmesi
Konut Orta ⭐ Yüksek Bölgesel engellemeler, veri merkezi IP'leri de engellendiğinde
Mobil Orta ⭐ Yüksek Sert bölgesel engellemeler, maksimum aşma gerektiğinde
SOCKS5 ⚡ Yüksek Yüksek Tüm trafiği, DNS dahil, proxy gerektirdiğinde

Bölgesel kısıtlamalar nedeniyle PyPI engeliyle karşılaşan çoğu geliştirici için en iyi seçim veri merkezi proxy'leri olacaktır — bunlar paketlerin indirilmesinde yüksek hız ve stabil bağlantı sağlar. Hız, özellikle PyTorch veya TensorFlow gibi ağır paketleri yüklerken (birkaç gigabayt) önemlidir.

Eğer veri merkezi IP'leri de bölgenizde engelleniyorsa (bu, sert devlet kısıtlamaları olduğunda olabilir), konut proxy'lerini düşünmelisiniz — bunlar gerçek ev kullanıcılarının IP'lerini kullanır ve engellemelere daha az maruz kalırlar.

HTTP vs HTTPS vs SOCKS5: pip neyi destekliyor?

Pip, HTTP ve HTTPS proxy'lerini yerel olarak destekler. SOCKS5 için ek bir paket yüklemeniz gerekir:

# Pip'te SOCKS5 desteği için pysocks gerekir
# Ama bir sorun var: pip, pysocks'ı yüklemek için gereklidir, ve pip proxy olmadan çalışmaz
# Çözüm: önce HTTP proxy üzerinden yükleyin, sonra SOCKS5'e geçin

pip install pysocks --proxy http://1.2.3.4:8080
# Bundan sonra SOCKS5 kullanabilirsiniz
pip install requests --proxy socks5://user:[email protected]:1080

Proxy alternatifi olarak PyPI aynaları

Eğer proxy ayarlamak karmaşık görünüyorsa veya güvenilir bir proxy sunucunuz yoksa, resmi ve gayri resmi PyPI aynalarını kullanabilirsiniz. Bu, özellikle Çin'deki geliştiriciler için geçerlidir, burada birkaç hızlı yerel ayna bulunmaktadır.

Popüler PyPI aynaları

Ayna URL Bölge / Operatör
Tsinghua https://pypi.tuna.tsinghua.edu.cn/simple Çin (Tsinghua Üniversitesi)
Aliyun https://mirrors.aliyun.com/pypi/simple Çin (Alibaba Cloud)
USTC https://pypi.mirrors.ustc.edu.cn/simple Çin (USTC)
Huawei Cloud https://repo.huaweicloud.com/repository/pypi/simple Çin (Huawei)

Aynayı nasıl kullanabilirim

# Tek seferlik, -i bayrağı ile
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

# Kalıcı olarak, pip.conf üzerinden
# [global]
# index-url = https://pypi.tuna.tsinghua.edu.cn/simple
# trusted-host = pypi.tuna.tsinghua.edu.cn

# Birden fazla kaynak (fallback)
pip install pandas \
  -i https://pypi.tuna.tsinghua.edu.cn/simple \
  --extra-index-url https://pypi.org/simple/

⚠️ Aynaların güvenliği hakkında önemli bilgiler

Sadece büyük kuruluşlardan (üniversiteler, bulut sağlayıcıları) güvenilir aynaları kullanın. Bilinmeyen aynalar, kötü amaçlı kod içeren değiştirilmiş paketler barındırabilir — bu, tedarik zinciri saldırısı (supply chain attack) olarak adlandırılır. Kritik projeler için en iyisi kendi aynanızı devpi veya bandersnatch ile kurmaktır.

Docker ve CI/CD için pip proxy

Docker görüntüleri oluşturulurken pip, PyPI'ye erişimi olmayan bir konteyner içinde çalıştırılır. Bu, kurumsal CI/CD boru hatlarında (GitLab CI, GitHub Actions, Jenkins) özellikle yaygın bir sorundur.

Dockerfile'da ARG üzerinden proxy iletimi

FROM python:3.11-slim

# Proxy için ARG tanımlıyoruz
ARG HTTP_PROXY
ARG HTTPS_PROXY

# pip ve diğer araçlar için ENV'ye iletiyoruz
ENV HTTP_PROXY=$HTTP_PROXY
ENV HTTPS_PROXY=$HTTPS_PROXY

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Kurulumdan sonra proxy'yi sıfırlıyoruz (güvenlik)
ENV HTTP_PROXY=""
ENV HTTPS_PROXY=""

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

Proxy ile iletimle inşa etme:

docker build \
  --build-arg HTTP_PROXY=http://user:[email protected]:8080 \
  --build-arg HTTPS_PROXY=http://user:[email protected]:8080 \
  -t myapp .

Docker daemon için global proxy ayarı

# Dosya: ~/.docker/config.json
{
  "proxies": {
    "default": {
      "httpProxy": "http://user:[email protected]:8080",
      "httpsProxy": "http://user:[email protected]:8080",
      "noProxy": "localhost,127.0.0.1"
    }
  }
}

GitLab CI / GitHub Actions

# .gitlab-ci.yml
variables:
  HTTP_PROXY: "http://user:[email protected]:8080"
  HTTPS_PROXY: "http://user:[email protected]:8080"
  PIP_INDEX_URL: "https://pypi.tuna.tsinghua.edu.cn/simple"

install:
  script:
    - pip install -r requirements.txt
# .github/workflows/ci.yml
jobs:
  build:
    runs-on: ubuntu-latest
    env:
      HTTP_PROXY: ${{ secrets.HTTP_PROXY }}
      HTTPS_PROXY: ${{ secrets.HTTP_PROXY }}
    steps:
      - uses: actions/checkout@v3
      - name: Bağımlılıkları yükle
        run: pip install -r requirements.txt

Önemli: Asla proxy kimlik bilgilerini YAML dosyalarına doğrudan yazmayın. CI/CD hizmetinizin gizli bilgilerini (Secrets) kullanın.

Poetry, conda ve uv için proxy ayarlama

Modern Python projeleri giderek daha fazla alternatif paket yöneticileri kullanmaktadır. Her biri için proxy ayarlamayı inceleyelim.

Poetry

Poetry, pip ile aynı şekilde ortam değişkenlerini kullanır. Ancak bir nüans var — Poetry, requests tabanlı kendi HTTP istemcisini kullanır, bu nedenle standart değişkenler çalışır:

# Poetry için çalışır
export HTTPS_PROXY=http://user:[email protected]:8080
poetry install

# Ya da pyproject.toml'da kaynak ayarı
# [[tool.poetry.source]]
# name = "tsinghua"
# url = "https://pypi.tuna.tsinghua.edu.cn/simple/"
# priority = "primary"

conda / mamba

Conda'nın kendi yapılandırma sistemi vardır:

# Komut üzerinden
conda config --set proxy_servers.http http://user:[email protected]:8080
conda config --set proxy_servers.https http://user:[email protected]:8080

# Ya da doğrudan ~/.condarc dosyasında
# proxy_servers:
#   http: http://user:[email protected]:8080
#   https: http://user:[email protected]:8080

# Çin için conda aynası
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes

uv (yeni hızlı paket yöneticisi)

uv, Astral tarafından geliştirilen en hızlı Python paket yöneticilerinden biridir. Ayrıca standart ortam değişkenlerini destekler:

export HTTPS_PROXY=http://user:[email protected]:8080
uv pip install numpy

# Ya da index bayrağı ile
uv pip install numpy --index-url https://pypi.tuna.tsinghua.edu.cn/simple

pipenv

# pipenv, pip'ten ortam değişkenlerini miras alır
export HTTPS_PROXY=http://user:[email protected]:8080
pipenv install requests

# Pipfile'da kaynak değiştirme
# [[source]]
# url = "https://pypi.tuna.tsinghua.edu.cn/simple"
# verify_ssl = true
# name = "tsinghua"

Sık karşılaşılan hatalar ve çözüm yolları

Geliştiricilerin pip için proxy ayarlarken karşılaştığı en yaygın sorunları inceleyelim.

Hata 1: SSL Sertifika Doğrulaması Başarısız

# Hata:
# SSL: CERTIFICATE_VERIFY_FAILED] sertifika doğrulaması başarısız: yerel verici sertifikası alınamadı

# Sebep: kurumsal proxy SSL sertifikalarını değiştirmektedir (MITM)
# Çözüm 1: kurumsal CA sertifikasını ekleyin
pip install requests --cert /path/to/corporate-ca.crt

# Çözüm 2: pip.conf dosyasında sertifika yolunu belirtin
# [global]
# cert = /path/to/corporate-ca.crt

# Çözüm 3 (üretimde önerilmez): SSL doğrulamasını devre dışı bırakın
pip install requests --trusted-host pypi.org --trusted-host files.pythonhosted.org

Hata 2: 407 Proxy Authentication Required

# Hata:
# ProxyError: 407 Proxy Authentication Required

# Sebep: proxy kimlik doğrulaması gerektiriyor, ancak kullanıcı adı/şifre verilmedi
# Çözüm: kimlik bilgilerini doğru bir şekilde kodladığınızdan emin olun

# Eğer şifre özel karakterler içeriyorsa, bunları kodlayın:
python3 -c "from urllib.parse import quote; print(quote('my@pass#word'))"
# Çıktı: my%40pass%23word

export HTTPS_PROXY="http://user:my%40pass%[email protected]:8080"

Hata 3: pip ortam değişkenlerini görmezden geliyor

# Ortam değişkenlerinin doğru ayarlandığını kontrol edin
echo $HTTPS_PROXY  # Linux/macOS
echo %HTTPS_PROXY%  # Windows cmd

# pip yapılandırma önceliğini kontrol edin
pip config debug

# Olası sebep: sanal ortam sistem değişkenlerini göremiyor
# Çözüm: venv'i etkinleştirin ve değişkenleri yeniden ayarlayın
source venv/bin/activate
export HTTPS_PROXY=http://1.2.3.4:8080
pip install package-name

Hata 4: Proxy üzerinden bile bağlantı zaman aşımı

# Proxy'nin erişilebilirliğini kontrol edin
curl -v --proxy http://user:[email protected]:8080 https://pypi.org/simple/

# Eğer proxy erişilemezse — sorun proxy sunucusundadır
# Başka bir port veya protokol deneyin

# pip'in zaman aşımını artırın
pip install package-name --timeout 120

# Ya da pip.conf'da:
# [global]
# timeout = 120

Hata 5: Paket yüklendi ama içe aktarma çalışmıyor

Bu, proxy ile ilgili değildir — muhtemelen paket sistem Python'una yüklendi, aktif sanal ortama değil. Kontrol edin:

which pip      # venv içindeki pip'i göstermelidir
which python   # venv içindeki python'u göstermelidir
pip show requests  # paketin nereye yüklendiğini gösterir

pip için proxy hata ayıklama kontrol listesi

Adım adım teşhis:

  1. Proxy olmadan PyPI erişilebilirliğini kontrol edin: curl https://pypi.org
  2. Proxy sunucusunun çalıştığından emin olun: curl --proxy http://1.2.3.4:8080 https://pypi.org
  3. Ortam değişkenlerini kontrol edin: env | grep -i proxy
  4. pip yapılandırmasını kontrol edin: pip config debug
  5. Doğrudan bayrağı deneyin: pip install pkg --proxy http://... -v
  6. SSL hataları varsa — kurumsal CA sertifikasını kontrol edin
  7. Hala çalışmıyorsa — proxy yerine ayna deneyin

Sonuç

PyPI engeli — çözülebilir bir sorun ve bunun birkaç güvenilir çözümü vardır. Hızlı bir başlangıç için sadece HTTPS_PROXY değişkenini ayarlamak ve pip'i normal şekilde çalıştırmak yeterlidir. Sürekli çalışma için — proxy'yi pip.conf dosyasına yazmalısınız. CI/CD için — gizli bilgileri ve ARG'yi Docker'da kullanmalısınız.

Proxy ve ayna arasındaki seçim, bağlama bağlıdır: aynalar daha hızlı ve daha kolay ayarlanabilir, ancak ayna operatörüne güvenmeyi gerektirir. Proxy daha evrenseldir — sadece PyPI ile değil, diğer tüm engellenmiş kaynaklarla (npm, Docker Hub, GitHub) de çalışır.

Eğer PyPI, GitHub, Docker Hub ve diğer engellenmiş kaynaklarla çalışmak için güvenilir bir proxy'ye ihtiyacınız varsa, veri merkezi proxy'lerine göz atmalısınız — bunlar ağır paketlerin indirilmesinde yüksek hız sağlar ve CI/CD ortamlarında stabil çalışır. Eğer bölgenizde veri merkezi IP'leri bile engelleniyorsa, gerçek ev kullanıcılarının IP'lerini kullanan konut proxy'lerini düşünün — bunlar bölgesel engellemelere çok daha az maruz kalırlar.

```