installer des paquets python sans internet et en utilisant le code source comme.tar.gz et.whl

nous essayons d'installer quelques paquets python sans internet.

For ex : python-keystoneclient

Pour cela nous avons les paquets téléchargés à partir de https://pypi.python.org/pypi/python-keystoneclient/1.7.1 et l'a gardé dans le serveur.

cependant, lors de l'installation de tar.gz et .whl packages, l'installation est à la recherche de paquets dépendants à installer en premier. Depuis il n'y a pas de connexion internet dans le serveur, il est arriver a échoué.

pour ex: Pour 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 à partir de la liste ci-dessus, une fois de plus il cherche une dépendance imbriquée .

y a-t-il un moyen de lister les paquets dépendants pour l'installation d'un module python comme Python-keystoneclient.

16
demandé sur srinath 2016-04-19 20:49:35

3 réponses

C'est 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

puis déplacer le fichier tar vers la machine de destination qui n'a pas D'accès Internet et effectuer ce qui suit:

tar xvfz keystone-deps.tgz
cd keystone-deps
pip install python_keystoneclient-2.3.1-py2.py3-none-any.whl -f ./ --no-index
30
répondu Praveen Yalagandula 2017-11-06 22:02:08

nous avons 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:

  1. basket qui est un petit utilitaire que vous utilisez sur votre hôte connecté à internet. Au lieu d'essayer d'installer un paquet, il va le télécharger, et tout le reste il doit être installé dans un répertoire. Vous déplacez ensuite ce répertoire sur votre machine cible. Avantages: très facile et simple à utiliser, Pas de casse-tête de serveur; Pas de ports à configurer. Points faibles: il n'y a pas de véritables showstoppers, mais le plus important est qu'il ne respecte aucune version que vous pourriez avoir; il téléchargera toujours la dernière version d'un paquet.

  2. lancer un serveur pypi local. Utilisé pypiserver et devpi. pypiserver est très simple à installer et à configurer; devpi prend un peu plus finagling. Ils font tous les deux la même chose - agissent comme un proxy/cache pour le vrai pypi et comme un serveur PyPI local pour tous les paquets produits à la maison. localshop est un nouveau qui n'était pas là quand je regardais, il a aussi la même idée. Donc, comment cela fonctionne est votre machine restreinte à internet va se connecter à ces serveurs, ils sont ensuite connectés à L'Internet afin qu'ils puissent mettre en cache et proxy le dépôt réel.

Le problème avec la deuxième approche est que même si vous obtenez un maximum de compatibilité et d'accès à L'ensemble du dépôt de paquets Python, vous devez quand même vous assurer que toutes les dépendances sont installées sur vos machines cibles (par exemple, tous les en-têtes pour les pilotes de base de données et une chaîne d'outils de compilation). De plus, ces solutions ne prennent pas en compte les dépôts non-pypi (par exemple, les paquets hébergés sur github).

nous sommes allés très loin avec la deuxième option cependant, donc je recommande certainement il.

finalement, fatigués d'avoir à gérer les problèmes de compatibilité et les bibliothèques, nous avons migré tout le cirque des serveurs vers des conteneurs docker pris en charge commercialement.

cela signifie que nous expédions tout ce qui est préconfiguré, rien n'a réellement besoin d'être installé sur les machines de production et cela a été la solution la plus simple pour nous.

nous avons remplacé les dépôts pypi par un serveur d'images docker local.

6
répondu Burhan Khalid 2016-04-19 21:56:17

pipdeptree est un utilitaire de ligne de commande pour afficher les paquets python installés dans un virtualenv sous forme d'arbre de dépendances. Juste l'utiliser: https://github.com/naiquevin/pipdeptree

0
répondu moveax3 2016-04-19 18:02:48