activate - virtualenv install
¿Cómo instalo desde un caché local con pip? (9)
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 programas de OS X.
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 manera predeterminada, puede desactivar 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
- 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. - 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.
Comenzando en la versión 6.0 , pip
ahora hace su propio almacenamiento en caché:
- DEPRECATION
pip install --download-cache
ypip 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 https://pip.pypa.io/en/latest/reference/pip_install.html#caching :
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 manera predeterminada, puede desactivar la caché y acceder siempre a PyPI utilizando la
--no-cache-dir
.
En mi opinión, pip2pi
es una solución mucho más elegante y confiable para este problema.
De los documentos:
pip2pi crea un repositorio de paquetes compatible con PyPI a partir de los requisitos de pip
pip2pi
te permite crear tu propio índice PyPI usando dos comandos simples:
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
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
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
.
Hay una nueva solución a esto llamada pip-accel , un reemplazo pip
para pip
con almacenamiento en caché integrado.
El programa 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 fuentes se almacenan en caché y se usan para generar un índice local de archivos de distribución de fuentes.
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 compilar estas dependencias para cada entorno virtual, las compilamos 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 compilación.
Hemos visto una aceleración de 10x al cambiar de pip
a pip-accel
.
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 <package name>
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 <package name>
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.
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.
Usando solo pip (mi versión es 1.2.1), también puedes 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 de requisitos se buscan en el repositorio 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).
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 :
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 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 paquetes serán completamente portátiles en todas las máquinas. Algunos paquetes se compilará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.