Farklı sanal ortamlarda aynı paketlerin çoğunu yüklüyorum . Bir paketi bir kez indirip sonra yerel bir önbellekten pip yükleme yapabilmemin bir yolu var mı ?
Bu, indirme bant genişliğini ve süresini azaltacaktır.
Farklı sanal ortamlarda aynı paketlerin çoğunu yüklüyorum . Bir paketi bir kez indirip sonra yerel bir önbellekten pip yükleme yapabilmemin bir yolu var mı ?
Bu, indirme bant genişliğini ve süresini azaltacaktır.
Yanıtlar:
Göre Pip belgelerinde :
V6.0 ile başlayarak, pip, bir web tarayıcısınınkine benzer şekilde çalışan bir varsayılan önbellek sağlar. Önbellek varsayılan olarak açıkken ve varsayılan olarak doğru olanı yapmak üzere tasarlanmış olsa da, önbelleği devre dışı bırakabilir ve
--no-cache-dir
seçeneği kullanarak her zaman PyPI'ye erişebilirsiniz .
Bu nedenle, bir güncelleme önbelleği istiyorsanız, güncellenmiş cevap sadece varsayılanlarıyla pip kullanmaktır.
Gönderen pip haberleri , sürüm 0.1.4:
Paket indirmelerini önbelleğe alacak olan $ PIP_DOWNLOAD_CACHE çevresel değişkeni için destek eklendi, böylece gelecekteki kurulumlar büyük indirmeler gerektirmeyecek. Ağ erişimi hala gereklidir, ancak bunu kullanırken sadece bazı indirmelerden kaçınılacaktır.
Bundan yararlanmak için aşağıdakileri ekledim ~/.bash_profile
:
export PIP_DOWNLOAD_CACHE=$HOME/.pip_download_cache
veya Mac kullanıyorsanız:
export PIP_DOWNLOAD_CACHE=$HOME/Library/Caches/pip-downloads
PIP_DOWNLOAD_CACHE
dizine eklenir . Örneğin, şimdi birkaç Django paketim var.virtualenvs
uçakta yeni oluşturmanın cevabı değil , ama yine de harika.Bence pip2pi
bu sorun için çok daha zarif ve güvenilir bir çözüm.
Dokümanlardan:
pip2pi, pip gereksinimlerinden PyPI uyumlu bir paket deposu oluşturur
pip2pi
iki basit komut kullanarak kendi PyPI dizininizi oluşturmanıza olanak tanır:
Bir paketi ve tüm gereksinimlerini yansıtmak için şunu kullanın pip2tgz
:
$ cd /tmp/; mkdir package/
$ pip2tgz packages/ httpie==0.2
...
$ ls packages/
Pygments-1.5.tar.gz
httpie-0.2.0.tar.gz
requests-0.14.0.tar.gz
Önceki dizinden bir paket dizini oluşturmak için:
$ ls packages/
bar-0.8.tar.gz
baz-0.3.tar.gz
foo-1.2.tar.gz
$ dir2pi packages/
$ find packages/
/httpie-0.2.0.tar.gz
/Pygments-1.5.tar.gz
/requests-0.14.0.tar.gz
/simple
/simple/httpie
/simple/httpie/httpie-0.2.0.tar.gz
/simple/Pygments
/simple/Pygments/Pygments-1.5.tar.gz
/simple/requests
/simple/requests/requests-0.14.0.tar.gz
2. adımda oluşturduğunuz dizinden yüklemek için şunları kullanabilirsiniz:
pip install --index-url=file:///tmp/packages/simple/ httpie==0.2
Kendi indeksinizi ile uzak bir ana bilgisayara bile yansıtabilirsiniz pip2pi
.
pip2tgz
paketi önceden belirlenmiş dizine indirip indirmediğinizi algılar, bu nedenle aynı yükleme satırını veya çakışan bağımlılıkları olan birkaç yükleme satırını çalıştırırsanız, her paketi yalnızca bir kez indirir.
Yeni Pip sürümleri artık indirmeleri varsayılan olarak önbelleğe alıyor. Bu belgelere bakın:
https://pip.pypa.io/en/stable/reference/pip_install/#caching
Adlı bir yapılandırma dosyası oluşturun ~/.pip/pip.conf
ve aşağıdaki içerikleri ekleyin:
[global]
download_cache = ~/.cache/pip
OS X'te, daha iyi bir seçim yolu, ~/Library/Caches/pip
diğer OS X programlarının kullandığı kurala uyduğu için olacaktır.
pip.conf
eden bir download_cache
ayara sahip olduğundan emin olun .
PIP_DOWNLOAD_CACHE'ın bazı ciddi sorunları var. En önemlisi, indirmenin ana bilgisayar adını önbelleğe kodlar, böylece aynaları kullanmak imkansız hale gelir.
Pip indirmelerinin önbelleğini yönetmenin en iyi yolu, "paketi indir" adımını "paketi yükle" adımından ayırmaktır. İndirilen dosyalar genellikle "sdist dosyaları" (kaynak dağıtımları) olarak adlandırılır ve ben bunları $ SDIST_CACHE dizininde saklayacağım.
İki adım şu şekildedir:
pip install --no-install --use-mirrors -I --download=$SDIST_CACHE <package name>
Hangi paketi indirir ve $ SDIST_CACHE ile gösterilen dizine yerleştirir. Paketi yüklemez. Ve sonra koşuyorsun:
pip install --find-links=file://$SDIST_CACHE --no-index --index-url=file:///dev/null <package name>
Paketi sanal ortamınıza yüklemek için. İdeal olarak, $ SDIST_CACHE kaynak kontrolünüz altında gerçekleştirilecektir. Üretime dağıtırken, paketleri indirmeden yüklemek için yalnızca ikinci pip komutunu çalıştırırsınız.
6.0 sürümünden başlayarak , pip
artık kendi önbelleğe alma özelliği var:
- DEPRECATION
pip install --download-cache
vepip wheel --download-cache
komut satırı bayrakları kullanımdan kaldırıldı ve işlevler kaldırıldı. Pip artık otomatik olarak yapılandırıldığı ve kullandığı dahili HTTP önbelleğini kullandığından--download-cache
mevcut seçenekler işlevsel değildir, ancak pip v8.0'da kaldırılıncaya kadar kabul edilecektir. Daha fazla bilgi için lütfen https://pip.pypa.io/en/latest/reference/pip_install.html#caching adresine bakın.
Yukarıdaki bağlantıdan daha fazla bilgi :
V6.0 ile başlayarak, pip, bir web tarayıcısınınkine benzer şekilde çalışan bir varsayılan önbellek sağlar. Önbellek varsayılan olarak açıkken ve varsayılan olarak doğru olanı yapmak üzere tasarlanmış olsa da, önbelleği devre dışı bırakabilir ve
--no-cache-dir
seçeneği kullanarak her zaman PyPI'ye erişebilirsiniz .
pip wheel , paketleri önceden derlemenin ekstra özelliği ile istediğinizi yapan mükemmel bir seçenektir. Gönderen resmi dokümanlar :
Bir gereksinim (ve tüm bağımlılıkları) için tekerlekler oluşturun:
$ pip wheel --wheel-dir=/tmp/wheelhouse SomePackage
Artık /tmp/wheelhouse
dizininizde tüm bağımlılıklar önceden derlenmiştir, böylece klasörü başka bir sunucuya kopyalayabilir ve her şeyi bu komutla yükleyebilirsiniz:
$ pip install --no-index --find-links=/tmp/wheelhouse SomePackage
Tüm paketlerin makineler arasında tamamen taşınabilir olmayacağını unutmayın. Bazı paketler, kullandığınız Python sürümü, işletim sistemi dağıtımı ve / veya donanım mimarisi için özel olarak oluşturulacaktır. Bu, -cp27-none-linux_x86_64
64 bit Linux'taki CPython 2.7 gibi dosya adında belirtilecektir .
Sadece pip kullanarak (benim sürüm 1.2.1), ayrıca böyle bir yerel depo oluşturabilirsiniz:
if ! pip install --find-links="file://$PIP_SDIST_INDEX" --no-index <package>; then
pip install --download-directory="$PIP_SDIST_INDEX" <package>
pip install --find-links="file://$PIP_SDIST_INDEX" --no-index <package>
fi
Pip'in ilk çağrısında, gereksinimler dosyasındaki paketler yerel depoda (yalnızca) aranır ve daha sonra oradan yüklenir. Bu başarısız olursa, pip paketleri her zamanki konumundan alır (örneğin, PyPI) ve bunu indirir PIP_SDIST_INDEX
(ancak hiçbir şey yüklemez!). Paketi yerel dizinden düzgün bir şekilde yüklemek için ilk çağrı "tekrarlanır".
( --download-cache
tam (çıkış karakterli) URL olan yerel bir dosya adı oluşturur ve pip bunu --find-links
. ile bir dizin olarak --download-cache
kullanamaz. bulunursa önbelleğe alınan dosyayı kullanır. Bu seçeneği ikinci pip çağrısına ekleyebiliriz, ancak dizinden beri zaten bir tür önbellek işlevi görür, mutlaka çok fazla getirmez. Örneğin, dizininiz boşaltılırsa yardımcı olur.)
Bunun için pip-accel adı verilen yeni bir çözüm var, pip
dahili önbellekleme için bir yedek .
Pip-accel programı, Python paket yöneticisi olan pip için bir paketleyicidir. Bir veya daha fazla gereksinim dosyası verilen Python sanal ortamlarını başlatmak için pip kullanımını hızlandırır. Bunu aşağıdaki iki yaklaşımı birleştirerek yapar:
Kaynak dağıtım indirmeleri önbelleğe alınır ve yerel kaynak dağıtım arşivleri dizini oluşturmak için kullanılır.
İkili dağıtımlar, ikili bileşenlerle (M2Crypto ve LXML gibi) bağımlılıkları yükleme işlemini hızlandırmak için kullanılır. Bu bağımlılıkları her sanal ortam için yeniden derlemek yerine, bir kez derleriz ve sonucu ikili * .tar.gz dağıtımı olarak önbelleğe alırız.
Paylogic, sürekli olarak birim testleri yürüten sürekli entegrasyon köleleri çiftliğinde sanal ortamları hızlı ve güvenilir bir şekilde başlatmak için pip-accel kullanır (bu, pip-hızının geliştirildiği orijinal kullanım durumlarından biriydi). Ayrıca yapı sunucularımızda da kullanıyoruz.
Biz geçiş dan 10x speedup etrafında gördüğüm pip
için pip-accel
.
Daha basit bir seçenek basket
.
Bir paket adı verildiğinde, onu ve merkezi bir konuma tüm bağımlılıkları indirir; pip önbelleğinin herhangi bir dezavantajı olmadan. Bu çevrimdışı kullanım için harika.
Daha sonra bu dizini aşağıdakiler için kaynak olarak kullanabilirsiniz pip
:
pip install --no-index -f file:///path/to/basket package
Veya easy_install
:
easy_install -f ~/path/to/basket -H None package
Ayrıca, çevrimiçi olduğunuzda sepeti güncellemek için de kullanabilirsiniz.