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:
- Proxy olmadan PyPI erişilebilirliğini kontrol edin:
curl https://pypi.org - Proxy sunucusunun çalıştığından emin olun:
curl --proxy http://1.2.3.4:8080 https://pypi.org - Ortam değişkenlerini kontrol edin:
env | grep -i proxy - pip yapılandırmasını kontrol edin:
pip config debug - Doğrudan bayrağı deneyin:
pip install pkg --proxy http://... -v - SSL hataları varsa — kurumsal CA sertifikasını kontrol edin
- 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.
```