instalando paquetes de python sin internet y usando código fuente como.tar.gz y.whl
pip openstack (4)
Así es como manejo este caso:
En la máquina donde tengo acceso a Internet:
mkdir keystone-deps
pip download python-keystoneclient -d "/home/aviuser/keystone-deps"
tar cvfz keystone-deps.tgz keystone-deps
Luego mueva el archivo tar a la máquina de destino que no tiene acceso a Internet y realice lo siguiente:
tar xvfz keystone-deps.tgz
cd keystone-deps
pip install python_keystoneclient-2.3.1-py2.py3-none-any.whl -f ./ --no-index
Estamos intentando instalar un par de paquetes de Python sin internet.
For ex : python-keystoneclient
Para eso tenemos los paquetes descargados de https://pypi.python.org/pypi/python-keystoneclient/1.7.1 y los guardamos en el servidor.
Sin embargo, al instalar los paquetes tar.gz y .whl, la instalación busca que primero se instalen paquetes dependientes. Como no hay conexión a Internet en el servidor, se está produciendo un error.
Por ejemplo: para python-keystoneclient tenemos los siguientes paquetes dependientes
stevedore (>=1.5.0)
six (>=1.9.0)
requests (>=2.5.2)
PrettyTable (<0.8,>=0.7)
oslo.utils (>=2.0.0)
oslo.serialization (>=1.4.0)
oslo.i18n (>=1.5.0)
oslo.config (>=2.3.0)
netaddr (!=0.7.16,>=0.7.12)
debtcollector (>=0.3.0)
iso8601 (>=0.1.9)
Babel (>=1.3)
argparse
pbr (<2.0,>=1.6)
Cuando trato de instalar paquetes uno por uno de la lista anterior, una vez más busca dependencia anidada.
¿Hay alguna manera de que podamos enumerar TODOS los paquetes dependientes para instalar un módulo de Python como python-keystoneclient?
Si desea instalar un grupo de dependencias, por ejemplo, a require.txt, haría:
mkdir dependencies
pip download -r requirements.txt -d "./dependencies"
tar cvfz dependencies.tar.gz dependencies
Y, una vez que transfiere dependencies.tar.gz a la máquina que no tiene internet, haría:
tar zxvf dependencies.tar.gz
cd dependencies
pip install * -f ./ --no-index
Tenemos una situación similar en el trabajo, donde las máquinas de producción no tienen acceso a Internet; por lo tanto, todo tiene que ser administrado fuera de línea y fuera del host.
Esto es lo que probé con variadas cantidades de éxito:
-
basket
que es una pequeña utilidad que ejecuta en su host conectado a Internet. En lugar de intentar instalar un paquete, en su lugar lo descargará y todo lo demás que necesita para instalarse en un directorio. Luego mueve este directorio a su máquina de destino. Pros: muy fácil y simple de usar, sin dolores de cabeza en el servidor; No hay puertos para configurar. Contras: no hay ningún showtoppers real, pero el más importante es que no respeta ninguna versión de fijación que pueda tener; siempre descargará la última versión de un paquete. -
Ejecute un servidor pypi local. Utiliza
pypiserver
ydevpi
.pypiserver
es súper simple de instalar y configurar;devpi
toma un poco más de tiempo. Ambos hacen lo mismo: actúan como proxy / caché para el pypi real y como servidor pypi local para cualquier paquete de cosecha propia.localshop
es uno nuevo que no existía cuando estaba buscando, también tiene la misma idea. Entonces, cómo funciona es que su máquina con acceso restringido a Internet se conectará a estos servidores, luego se conectarán a Internet para que puedan almacenar en caché y proxy el repositorio real.
El problema con el segundo enfoque es que, aunque obtiene la máxima compatibilidad y acceso a todo el repositorio de paquetes de Python, aún debe asegurarse de que todas las dependencias estén instaladas en sus máquinas de destino (por ejemplo, cualquier encabezado para los controladores de la base de datos y un Cadena de herramientas de construcción). Además, estas soluciones no se adaptan a repositorios que no sean pypi (por ejemplo, paquetes alojados en github).
Sin embargo, llegamos muy lejos con la segunda opción, por lo que definitivamente la recomendaría.
Eventualmente, cansados de tener que lidiar con problemas de compatibilidad y bibliotecas, migramos todo el circo de servidores a contenedores docker con soporte comercial.
Esto significa que enviamos todo preconfigurado, en realidad no es necesario instalar nada en las máquinas de producción y ha sido la solución más sencilla para nosotros.
Reemplazamos los repositorios de pypi con un servidor local de imágenes docker.
pipdeptree
es una utilidad de línea de comandos para mostrar los paquetes de python instalados en un virtualenv en forma de árbol de dependencias.
Solo
https://github.com/naiquevin/pipdeptree
:
https://github.com/naiquevin/pipdeptree