nous essayons d'installer deux python paquets sans Internet.
For ex : python-keystoneclient
Pour cela, nous avons les paquets téléchargés depuis https://pypi.python.org/pypi/python-keystoneclient/1.7.1 et les avons conservés sur le serveur.
Toutefois, lors de l’installation des packages tar.gz et .whl, l’installation recherche d’abord les packages dépendants. Comme il n'y a pas de connexion Internet sur le serveur, le problème a échoué.
Par exemple, pour python-keystoneclient, nous avons les paquets dépendants suivants
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)
Quand j'essaie d'installer des paquets un par un dans la liste ci-dessus, encore une fois, c'est à la recherche d'une dépendance imbriquée.
Existe-t-il un moyen de répertorier [~ # ~] tous [~ # ~] les packages dépendants pour l'installation d'un module python comme python -keystoneclient.
Voici comment je gère ce cas:
Sur la machine où j'ai accès à Internet:
mkdir keystone-deps
pip download python-keystoneclient -d "/home/aviuser/keystone-deps"
tar cvfz keystone-deps.tgz keystone-deps
Déplacez ensuite le fichier tar sur la machine de destination n'ayant pas accès à Internet et procédez comme suit:
tar xvfz keystone-deps.tgz
cd keystone-deps
pip install python_keystoneclient-2.3.1-py2.py3-none-any.whl -f ./ --no-index
Si vous souhaitez installer un ensemble de dépendances à partir de, par exemple, un fichier Requirements.txt, vous feriez:
mkdir dependencies
pip download -r requirements.txt -d "./dependencies"
tar cvfz dependencies.tar.gz dependencies
Et, une fois que vous aurez transféré le fichier dependencies.tar.gz sur la machine ne disposant pas d’Internet, vous devrez:
tar zxvf dependencies.tar.gz
cd dependencies
pip install * -f ./ --no-index
Nous sommes dans une situation similaire au travail, où les machines de production n’ont pas accès à Internet; par conséquent, tout doit être géré hors ligne et hors hôte.
Voici ce que j'ai essayé avec différentes quantités de succès:
basket
qui est un petit utilitaire que vous exécutez sur votre hôte connecté à Internet. Au lieu d’essayer d’installer un paquet, il le téléchargera, ainsi que tout ce qui est nécessaire pour l’installer dans un répertoire. Vous déplacez ensuite ce répertoire sur votre machine cible. Avantages: très facile et simple à utiliser, aucun problème de serveur; pas de ports à configurer. Inconvénients: il n’existe pas de véritables obstacles, mais le plus important est qu’il ne respecte aucune version épinglée; il téléchargera toujours la dernière version d'un paquet.
Exécutez un serveur pypi local. Utilisé pypiserver
et devpi
. pypiserver
est très simple à installer et à configurer; devpi
prend un peu plus de temps. Ils font tous les deux la même chose - agissent en tant que proxy/cache pour le vrai pypi et en tant que serveur pypi local pour tous les paquets développés à la maison. localshop
est un nouveau système qui n’était pas présent lorsque je cherchais, il a également la même idée. Ainsi, comment cela fonctionne-t-il? Votre ordinateur connecté à Internet se connecte à ces serveurs. Ils sont ensuite connectés à Internet pour pouvoir mettre en cache et mettre en proxy le référentiel réel.
Le problème avec la seconde approche est que, bien que vous obteniez une compatibilité maximale et un accès à l’ensemble du référentiel des Python, vous devez toujours vous assurer que toutes les dépendances sont installées sur vos machines cible (par exemple). Par exemple, ces en-têtes pour les pilotes de base de données et une chaîne d’outils de construction) .En outre, ces solutions ne prennent pas en charge les référentiels non-Pypi (par exemple, les packages hébergés sur github).
Nous sommes allés très loin avec la deuxième option, donc je le recommanderais sans hésiter.
Finalement, fatigués d’avoir à gérer des problèmes de compatibilité et des bibliothèques, nous avons migré l’ensemble du cirque de serveurs vers des conteneurs Docker pris en charge de manière commerciale.
Cela signifie que nous livrons tout ce qui est préconfiguré, que rien n’a réellement besoin d’être installé sur les machines de production et que c’est la solution la plus silencieuse pour nous.
Nous avons remplacé les référentiels pypi par un serveur d’image local.
pipdeptree
est un utilitaire de ligne de commande permettant d’afficher les packages python installés sous virtualenv sous la forme d’un arbre de dépendance). Utilisez-le simplement: https: // github. com/naiquevin/pipdeptree