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

Instalo muchos paquetes iguales en diferentes entornos Virtualenv . ¿Hay alguna manera de que pueda descargar un paquete una vez y luego tener la instalación de pip desde un caché local?

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

    Respuesta actualizada 19-Nov-15

    De acuerdo con la documentación de Pip :

    Comenzando con v6.0, pip proporciona un on por caché predeterminado que funciona de manera similar a la de un navegador web. Si bien la caché está activada de manera predeterminada y está diseñada para hacer lo correcto de forma predeterminada, puede deshabilitar la caché y acceder siempre a PyPI utilizando la --no-cache-dir .

    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:

    Se agregó soporte para una variable ambiental $ PIP_DOWNLOAD_CACHE que almacenará en caché las descargas de los paquetes, por lo que las futuras instalaciones no requerirán grandes descargas. El acceso a la red todavía es necesario, pero solo se evitarán algunas descargas al usarlo.

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

     export PIP_DOWNLOAD_CACHE=$HOME/.pip_download_cache 

    o, si estás en una 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 agregará 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 las noticias de pip , por lo que no es la respuesta para crear nuevos virtualenvs en el avión, pero sigue siendo genial.

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

    De los documentos:

    pip2pi crea un repository de paquetes compatible con PyPI a partir de los requisitos de pip

    pip2pi te permite crear tu propio índice PyPI usando dos comandos simples:

    1. Para duplicar 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 generar un índice de paquete desde el directorio anterior:

       $ 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., simplemente puede usar:

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

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

    Para las versiones más nuevas de Pip:

    Las versiones más nuevas de Pip ahora almacenan en caché las descargas 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:

     [global] download_cache = ~/.cache/pip 

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

    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 el uso de réplicas se vuelve imposible.

    La mejor forma 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 fuente) y los voy a almacenar en un directorio $ SDIST_CACHE.

    Los dos pasos terminan siendo:

     pip install --no-install --use-mirrors -I --download=$SDIST_CACHE  

    Que descargará el paquete y lo colocará en el directorio apuntado por $ SDIST_CACHE. No instalará el paquete. Y luego corres:

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

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

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

    • DEPRECATION pip install --download-cache y pip wheel --download-cache flags de línea de comando se han desaprobado y se ha eliminado la funcionalidad. Como pip ahora configura y usa automáticamente su caché HTTP interna que suplanta el --download-cache las opciones existentes se han dejado sin funcionar, pero se seguirán aceptando hasta que se eliminen 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 de arriba :

    Comenzando con v6.0, pip proporciona un on por caché predeterminado que funciona de manera similar a la de un navegador web. Si bien la caché está activada de manera predeterminada y está diseñada para hacer lo correcto de forma predeterminada, puede deshabilitar la caché y acceder siempre a PyPI utilizando la --no-cache-dir .

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

    Construir ruedas para un requerimiento (y todas sus dependencias):

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

    Ahora su directorio /tmp/wheelhouse tiene todas sus dependencias precomstackdas, 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 paquetes serán completamente portátiles en todas las máquinas. Algunos paquetes se comstackrán específicamente para la versión de Python, la distribución del sistema operativo y / o la architecture 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.

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

     if ! pip install --find-links="file://$PIP_SDIST_INDEX" --no-index ; then pip install --download-directory="$PIP_SDIST_INDEX"  pip install --find-links="file://$PIP_SDIST_INDEX" --no-index  fi 

    En la primera llamada de pip, los paquetes del archivo de requisitos se buscan en el repository local (solamente) 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 del índice local.

    ( --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 usará el archivo en caché, si se encuentra. podría agregar esta opción a la segunda llamada de pip, pero dado que el índice ya funciona como un tipo de caché, no necesariamente trae mucho. Sería útil si su índice se vacía, por ejemplo).

    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 memoria caché pip. Esto es ideal para usar sin conexión.

    A continuación, puede utilizar este directorio como fuente de 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 cuando esté en línea.

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

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

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

    • Las distribuciones binarias se utilizan para acelerar el proceso de instalación de dependencias con componentes binarios (como M2Crypto y LXML). En lugar de volver a comstackr estas dependencias para cada entorno virtual, las comstackmos una vez y almacenamos en caché el resultado como una distribución * .tar.gz binaria.

    Paylogic utiliza pip-accel para inicializar de forma rápida y fiable entornos virtuales en su granja de esclavos de integración continua que ejecutan 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 comstackción.

    Hemos visto una aceleración de 10x al cambiar de pip a pip-accel .

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