¿Cómo instalo desde una caché local con pip?


Instalo muchos de los mismos paquetes en diferentes entornos virtualenv. ¿Hay alguna forma de que pueda descargar un paquete una vez y luego tener pip instalar desde una caché local?

Esto reduciría el ancho de banda y el tiempo de descarga.

Author: Matthew Rankin, 2011-01-26

10 answers

Respuesta actualizada 19-Nov-15

De acuerdo con la documentación del Pip :

A partir de la v6.0, pip proporciona una caché activada por defecto que funciona de manera similar a la de un navegador web. Mientras la caché esté activada de forma predeterminada y esté diseñada, haga lo correcto de forma predeterminada, puede desactivar la caché y acceder siempre a PyPI utilizando la opción --no-cache-dir.

Por lo tanto, la respuesta actualizada es simplemente usar pip con sus valores predeterminados si desea una descarga cache.

Respuesta original

De la pip news , versión 0.1.4:

Se agregó soporte para una variable ambiental PIP PIP_DOWNLOAD_CACHE que almacenará en caché las descargas de paquetes, por lo que las futuras instalaciones no requerirán descargas grandes. El acceso a la red sigue siendo necesario, pero solo se evitarán algunas descargas cuando se use esto.

Para aprovechar esto, he agregado lo siguiente a mi ~/.bash_profile:

export PIP_DOWNLOAD_CACHE=$HOME/.pip_download_cache

O, si usted está en un Mac:

export PIP_DOWNLOAD_CACHE=$HOME/Library/Caches/pip-downloads

Notas

  1. Si se detecta una versión más reciente de un paquete, se descargará y se añadirá al directorio PIP_DOWNLOAD_CACHE. Por ejemplo, ahora tengo bastantes paquetes de Django.
  2. Esto no elimina la necesidad de acceso a la red, como se indica en el pip news, por lo que no es la respuesta para crear nuevos virtualenvs en el avión, pero sigue siendo genial.
 121
Author: Matthew Rankin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-19 18:49:19

En mi opinión, pip2pi es una solución mucho más elegante y fiable para este problema.

De los documentos:

Pip2pi construye un repositorio de paquetes compatible con PyPI a partir de pip requirements

pip2pi le permite crear su propio índice PyPI mediante el uso de dos comandos simples:

  1. Para reflejar un paquete y todos sus requisitos, use 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
    
  2. Para construir un índice de paquetes a partir del anterior directorio:

    $ 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
    
  3. Para instalar desde el índice que construyó en el paso 2. usted puede simplemente utilizar:

    pip install --index-url=file:///tmp/packages/simple/ httpie==0.2
    

Incluso puede reflejar su propio índice en un host remoto con pip2pi.

 49
Author: K Z,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-21 06:40:59

Para versiones Pip más recientes:

Las versiones Pip más recientes ahora almacenan en caché las descargas por defecto. Ver esta documentación:

Https://pip.pypa.io/en/stable/reference/pip_install/#caching

Para versiones Pip más antiguas:

Cree un archivo de configuración llamado ~/.pip/pip.conf, y agregue el siguiente contenido:

[global]
download_cache = ~/.cache/pip

En OS X, una mejor ruta a elegir sería ~/Library/Caches/pip ya que sigue la convención que otros programas de OS X usan.

 30
Author: Flimm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-03 10:13:24

PIP_DOWNLOAD_CACHE tiene algunos problemas serios. Lo más importante es que codifica el nombre de host de la descarga en la caché, por lo que el uso de réplicas se vuelve imposible.

La mejor manera de administrar una caché de descargas 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 código fuente) y voy a almacenarlos en un directorio SD SDIST_CACHE.

Los dos pasos terminan siendo:

pip install --no-install --use-mirrors -I --download=$SDIST_CACHE <package name>

Que descargará el paquete y lo colocará en el directorio al que apunta $SDIST_CACHE. No instalará el paquete. Y luego corres:

pip install --find-links=file://$SDIST_CACHE --no-index --index-url=file:///dev/null <package name> 

Para instalar el paquete en su entorno virtual. Idealmente, $SDIST_CACHE se confirmaría bajo su control de código fuente. Al implementar en producción, solo ejecutaría el segundo comando pip para instalar los paquetes sin descargarlos.

 28
Author: slacy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-27 18:23:34

Comenzando en versión 6.0, pip ahora lo hace su propio almacenamiento en caché:

  • OBSOLESCENCIA pip install --download-cache y pip wheel --download-cache los indicadores de la línea de comandos han sido obsoletos y la funcionalidad eliminada. Dado que pip ahora configura y usa automáticamente su caché HTTP interna que suplanta a --download-cache, las opciones existentes se han vuelto no funcionales, pero seguirán siendo aceptadas hasta su eliminación en pip v8.0. Para obtener más información, consulte https://pip.pypa.io/en/latest/reference/pip_install.html#caching

Más información del enlace anterior :

A partir de la v6.0, pip proporciona una caché activada por defecto que funciona de manera similar a la de un navegador web. Mientras la caché esté activada de forma predeterminada y esté diseñada, haga lo correcto de forma predeterminada, puede desactivar la caché y acceder siempre a PyPI utilizando la opción --no-cache-dir.

 12
Author: Jace Browning,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-29 04:47:06

Pip wheel es una excelente opción que hace lo que quiere con la característica adicional de pre-compilar los paquetes. De los documentos oficiales :

Construye ruedas para un requisito (y todas sus dependencias):

$ pip wheel --wheel-dir=/tmp/wheelhouse SomePackage

Ahora su directorio /tmp/wheelhouse tiene todas sus dependencias precompiladas, por lo que puede copiar la carpeta a otro servidor e instalar todo con este comando:

$ pip install --no-index --find-links=/tmp/wheelhouse SomePackage

Tenga en cuenta que no todos los los paquetes serán completamente portátiles a través de 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.

 8
Author: hdiogenes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-25 20:01:16

Usando solo pip (mi versión es 1.2.1), también puede construir un repositorio local como este:

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

En la primera llamada de pip, los paquetes del archivo requirements 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 PIP_SDIST_INDEX (¡pero no instala nada!). La primera llamada se "repite" para instalar correctamente el paquete desde el local Indice.

(--download-cache crea un nombre de archivo local que es la URL completa (escapada), y pip no puede usar esto como un í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 como el índice ya funciona como una especie de caché, no necesariamente trae mucho. Ayudaría si su índice se vacía, por ejemplo.)

 3
Author: user1010997,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-16 12:58:17

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é pip. Esto es ideal para uso fuera de línea.

Luego puede usar este directorio como fuente para pip:

pip install --no-index -f file:///path/to/basket package

O easy_install:

easy_install -f ~/path/to/basket -H None package

También puede usarlo para actualizar la cesta cada vez que esté en línea.

 2
Author: Burhan Khalid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-22 11:05:44

Hay una nueva solución para esto llamada pip-accel, un reemplazo drop-in para pip con almacenamiento en caché incorporado.

El programa pip-accel es un contenedor para pip, el gestor de paquetes de Python. Acelera el uso de pip para inicializar entornos virtuales de Python dados uno o más archivos de requisitos. Lo hace combinando los dos enfoques siguientes:

  • Las descargas de distribución de fuentes se almacenan en caché y se utilizan para generar un índice local de fuentes archivos de distribución.

  • Las distribuciones binarias se utilizan para acelerar el proceso de instalación de dependencias con componentes binarios (como M2Crypto y LXML). En lugar de recompilar estas dependencias de nuevo para cada entorno virtual, las compilamos una vez y almacenamos en caché el resultado como un binario *.alquitrán.gz distribution.

Paylogic utiliza pip-accel para inicializar de forma rápida y fiable entornos virtuales en su granja de esclavos de integración continua que son ejecutar constantemente pruebas unitarias (este fue uno de los casos de uso originales para los que se desarrolló pip-accel). También lo usamos en nuestros servidores de compilación.

Hemos visto un aumento de velocidad de 10x al cambiar de pip a pip-accel.

 2
Author: qris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-02 13:50:33

Creo que el paquete "pip-accel" debe ser una buena opción.

 0
Author: lasthuman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-11 02:03:15