Instalo muchos de los mismos paquetes en diferentes entornos virtualenv . ¿Hay alguna manera de que pueda descargar un paquete una vez y luego instalar pip desde un caché local?
Esto reduciría el ancho de banda y el tiempo de descarga.
virtualenv
pip
Matthew Rankin
fuente
fuente
Respuestas:
Respuesta actualizada 19-nov-15
De acuerdo con la documentación de Pip :
Por lo tanto, la respuesta actualizada es simplemente usar pip con sus valores predeterminados si desea una caché de descarga.
Respuesta original
De las noticias de pip , versión 0.1.4:
Para aprovechar esto, agregué lo siguiente a mi
~/.bash_profile
:o, si estás en una Mac:
Notas
PIP_DOWNLOAD_CACHE
directorio. Por ejemplo, ahora tengo bastantes paquetes de Django.virtualenvs
en el avión, pero sigue siendo genial.fuente
En mi opinión,
pip2pi
es una solución mucho más elegante y confiable para este problema.De los documentos:
pip2pi
le permite crear su propio índice PyPI utilizando dos comandos simples:Para reflejar un paquete y todos sus requisitos, use
pip2tgz
:Para crear un índice de paquete desde el directorio anterior:
Para instalar desde el índice que creó en el paso 2., simplemente puede usar:
Incluso puede reflejar su propio índice en un host remoto con
pip2pi
.fuente
pip2tgz
detecta si ya ha descargado el paquete en el directorio designado, por lo que si ejecuta la misma línea de instalación o varias líneas de instalación que tienen dependencias superpuestas, solo descargará cada paquete una vez.Para las nuevas versiones de Pip:
Las versiones más recientes de Pip ahora se descargan en caché de forma predeterminada. Ver esta documentación:
https://pip.pypa.io/en/stable/reference/pip_install/#caching
Para versiones anteriores de Pip:
Cree un archivo de configuración llamado
~/.pip/pip.conf
y agregue los siguientes contenidos:En OS X, una mejor ruta para elegir sería
~/Library/Caches/pip
ya que sigue la convención que usan otros programas de OS X.fuente
pip.conf
unadownload_cache
configuración que apunte al mismo directorio de todo el sistema.PIP_DOWNLOAD_CACHE tiene algunos problemas serios. Lo más importante es que codifica el nombre de host de la descarga en el caché, por lo que es imposible usar espejos.
La mejor manera de administrar un caché de descargas de pip es separar el paso "descargar el paquete" del paso "instalar el paquete". Los archivos descargados se conocen comúnmente como "archivos sdist" (distribuciones de origen) y los voy a almacenar en un directorio $ SDIST_CACHE.
Los dos pasos terminan siendo:
Que descargará el paquete y lo colocará en el directorio señalado por $ SDIST_CACHE. No instalará el paquete. Y luego corres:
Para instalar el paquete en su entorno virtual. Idealmente, $ SDIST_CACHE se comprometería bajo su control de origen. Cuando se implementa en producción, solo ejecuta el segundo comando pip para instalar los paquetes sin descargarlos.
fuente
A partir de la versión 6.0 ,
pip
ahora realiza su propio almacenamiento en caché:Más información en el enlace de arriba :
fuente
pip wheel es una excelente opción que hace lo que quiere con la característica adicional de precompilar los paquetes. De los documentos oficiales :
Ahora su
/tmp/wheelhouse
directorio tiene todas sus dependencias precompiladas, por lo que puede copiar la carpeta a otro servidor e instalar todo con este comando:Tenga en cuenta que no todos los paquetes serán completamente portátiles en todas las máquinas. Algunos paquetes se construirán específicamente para la versión de Python, la distribución del sistema operativo y / o la arquitectura de hardware que está utilizando. Eso se especificará en el nombre del archivo, como
-cp27-none-linux_x86_64
para CPython 2.7 en un Linux de 64 bits, etc.fuente
Usando solo pip (mi versión es 1.2.1), también puede construir un repositorio local como este:
En la primera llamada de pip, los paquetes del archivo de requisitos se buscan en el repositorio local (solo) y luego se instalan desde allí. Si eso falla, pip recupera los paquetes de su ubicación habitual (por ejemplo, PyPI) y los descarga en el
PIP_SDIST_INDEX
(¡pero no instala nada!). La primera llamada se "repite" para instalar correctamente el paquete desde el índice local.(
--download-cache
crea un nombre de archivo local que es el URL completo (escapado), y pip no puede usar esto como índice con--find-links
.--download-cache
Utilizará el archivo en caché, si se encuentra. Podríamos agregar esta opción a la segunda llamada de pip, pero desde el índice ya funciona como una especie de caché, no necesariamente trae mucho. Ayudaría si su índice se vacía, por ejemplo).fuente
Hay una nueva solución para esto llamada pip-accel , un reemplazo directo para el
pip
almacenamiento en caché incorporado.Hemos visto alrededor de 10 veces la aceleración al cambiar de
pip
apip-accel
.fuente
Una opción más simple es
basket
.Dado un nombre de paquete, lo descargará y todas las dependencias a una ubicación central; sin ninguno de los inconvenientes de la caché de pip. Esto es genial para usar sin conexión.
Luego puede usar este directorio como fuente para
pip
:O
easy_install
:También puede usarlo para actualizar la cesta cada vez que esté en línea.
fuente
Creo que el paquete "pip-accel" debe ser una buena opción.
fuente