Saya menginstal banyak paket yang sama di lingkungan virtualenv yang berbeda . Apakah ada cara saya bisa mengunduh paket sekali dan kemudian menginstal pip dari cache lokal?
Ini akan mengurangi bandwidth dan waktu pengunduhan.
virtualenv
pip
Matthew Rankin
sumber
sumber
Jawaban:
Jawaban Diperbarui 19-Nov-15
Menurut dokumentasi Pip :
Oleh karena itu, jawaban yang diperbarui adalah dengan hanya menggunakan pip dengan standarnya jika Anda ingin cache unduhan.
Jawaban Asli
Dari berita terbaru , versi 0.1.4:
Untuk memanfaatkan ini, saya telah menambahkan yang berikut ke
~/.bash_profile
:atau, jika Anda menggunakan Mac:
Catatan
PIP_DOWNLOAD_CACHE
direktori. Sebagai contoh, saya sekarang memiliki beberapa paket Django.virtualenvs
di pesawat, tetapi masih bagus.sumber
Menurut pendapat saya,
pip2pi
adalah solusi yang jauh lebih elegan dan dapat diandalkan untuk masalah ini.Dari dokumen:
pip2pi
memungkinkan Anda untuk membuat indeks PyPI Anda sendiri dengan menggunakan dua perintah sederhana:Untuk mencerminkan paket dan semua persyaratannya, gunakan
pip2tgz
:Untuk membangun indeks paket dari direktori sebelumnya:
Untuk menginstal dari indeks yang Anda buat pada langkah 2., Anda cukup menggunakan:
Anda bahkan dapat mencerminkan indeks Anda sendiri ke host jarak jauh dengan
pip2pi
.sumber
pip2tgz
mendeteksi jika Anda telah mengunduh paket ke direktori yang ditunjuk, jadi jika Anda menjalankan jalur instal yang sama atau beberapa jalur instal yang memiliki dependensi yang tumpang tindih, ia hanya akan mengunduh setiap paket sekali saja.Untuk versi Pip yang lebih baru:
Versi Pip yang lebih baru sekarang mengunduh cache secara default. Lihat dokumentasi ini:
https://pip.pypa.io/en/stable/reference/pip_install/#caching
Untuk versi Pip yang lebih lama:
Buat file konfigurasi dengan nama
~/.pip/pip.conf
, dan tambahkan konten berikut:Pada OS X, jalur yang lebih baik untuk dipilih adalah
~/Library/Caches/pip
karena mengikuti konvensi yang digunakan oleh program OS X lainnya.sumber
pip.conf
dengandownload_cache
pengaturan yang mengarah ke direktori seluruh sistem yang sama.PIP_DOWNLOAD_CACHE memiliki beberapa masalah serius. Yang paling penting, ini mengkodekan hostname dari unduhan ke dalam cache, jadi menggunakan mirror menjadi tidak mungkin.
Cara yang lebih baik untuk mengelola cache unduhan pip adalah dengan memisahkan langkah "unduh paket" dari langkah "instal paket". File yang diunduh biasanya disebut "file sdist" (distribusi sumber) dan saya akan menyimpannya dalam direktori $ SDIST_CACHE.
Dua langkah tersebut akhirnya menjadi:
Yang akan mengunduh paket dan meletakkannya di direktori yang ditunjuk oleh $ SDIST_CACHE. Itu tidak akan menginstal paket. Dan kemudian Anda menjalankan:
Untuk menginstal paket ke lingkungan virtual Anda. Idealnya, $ SDIST_CACHE akan dilakukan di bawah kendali sumber Anda. Saat menggunakan produksi, Anda hanya akan menjalankan perintah pip kedua untuk menginstal paket tanpa mengunduhnya.
sumber
Mulai dalam versi 6.0 ,
pip
sekarang melakukan caching sendiri:Informasi lebih lanjut dari tautan di atas :
sumber
roda pip adalah opsi yang sangat baik yang melakukan apa yang Anda inginkan dengan fitur tambahan pra-kompilasi paket. Dari dokumen resmi :
Sekarang
/tmp/wheelhouse
direktori Anda memiliki semua dependensi yang telah dikompilasi, sehingga Anda dapat menyalin folder ke server lain dan menginstal semuanya dengan perintah ini:Perhatikan bahwa tidak semua paket akan sepenuhnya portabel di seluruh mesin. Beberapa paket akan dibuat khusus untuk versi Python, distribusi OS dan / atau arsitektur perangkat keras yang Anda gunakan. Itu akan ditentukan dalam nama file, seperti
-cp27-none-linux_x86_64
untuk CPython 2.7 pada Linux 64-bit, dll.sumber
Hanya menggunakan pip (versi saya 1.2.1), Anda juga dapat membangun repositori lokal seperti ini:
Dalam panggilan pertama pip, paket-paket dari file persyaratan dilihat dalam repositori lokal (hanya), dan kemudian diinstal dari sana. Jika gagal, pip mengambil paket dari lokasi biasanya (mis. PyPI) dan mengunduhnya ke
PIP_SDIST_INDEX
(tetapi tidak menginstal apa pun!). Panggilan pertama "diulang" untuk menginstal paket dengan benar dari indeks lokal.(
--download-cache
membuat nama file lokal yang merupakan URL lengkap (lolos), dan pip tidak dapat menggunakan ini sebagai indeks dengan--find-links
.--download-cache
akan menggunakan file yang di-cache, jika ditemukan. Kami dapat menambahkan opsi ini ke panggilan kedua pip, tetapi karena indeks sudah berfungsi sebagai semacam cache, itu tidak selalu membawa banyak. Ini akan membantu jika indeks Anda dikosongkan, misalnya.)sumber
Ada solusi baru untuk pip-accel ini , pengganti drop-in untuk
pip
caching bawaan.Kami telah melihat sekitar 10x percepatan dari beralih dari
pip
kepip-accel
.sumber
Opsi yang lebih sederhana adalah
basket
.Diberi nama paket, itu akan mengunduhnya dan semua dependensi ke lokasi pusat; tanpa kekurangan cache pip. Ini bagus untuk penggunaan offline.
Anda kemudian dapat menggunakan direktori ini sebagai sumber untuk
pip
:Atau
easy_install
:Anda juga dapat menggunakannya untuk memperbarui keranjang kapan pun Anda online.
sumber
Saya pikir paket "pip-accel" harus menjadi pilihan yang baik.
sumber