Quelle est la meilleure façon de télécharger un paquet python et ses dépendances depuis pypi pour l'installer hors ligne sur une autre machine ? Existe-t-il un moyen simple de le faire avec pip ou easy_install ? J'essaie d'installer la bibliothèque requests sur une machine FreeBSD qui n'est pas connectée à Internet.
Réponses
Trop de publicités?Sur le système qui a accès à l'internet
Le tuyau download
vous permet de télécharger des paquets sans les installer :
pip download -r requirements.txt
(Dans les versions précédentes de pip, cela s'écrivait pip install --download -r requirements.txt
.)
Sur le système qui n'a pas accès à l'internet
Vous pouvez alors utiliser
pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt
pour installer ces modules téléchargés, sans accéder au réseau.
Si vous voulez installer les librairies python et leurs dépendances hors ligne, finissez de suivre ces étapes sur une machine avec le même OS, le même réseau connecté et python installé :
1) Créer un requirements.txt
avec un contenu similaire (Note - ce sont les bibliothèques que vous souhaitez télécharger) :
Flask==0.12
requests>=2.7.0
scikit-learn==0.19.1
numpy==1.14.3
pandas==0.22.0
Une option pour créer le fichier d'exigences est d'utiliser pip freeze > requirements.txt
. Cela donnera la liste de toutes les bibliothèques de votre environnement. Vous pouvez ensuite aller dans requirements.txt
et supprimer ceux qui ne sont pas nécessaires.
2) Exécuter la commande mkdir wheelhouse && pip download -r requirements.txt -d wheelhouse
pour télécharger les librairies et leurs dépendances dans le répertoire wheelhouse
3) Copiez le fichier requirements.txt dans wheelhouse
répertoire
4) Archiver la timonerie dans wheelhouse.tar.gz
con tar -zcf wheelhouse.tar.gz wheelhouse
Puis téléchargez wheelhouse.tar.gz
sur votre machine cible :
1) Exécuter tar -zxf wheelhouse.tar.gz
pour extraire les fichiers
2) Exécuter pip install -r wheelhouse/requirements.txt --no-index --find-links wheelhouse
pour installer les librairies et leurs dépendances
Si le paquet est sur PYPI, téléchargez-le et ses dépendances dans un répertoire local. Par exemple
$ mkdir /pypi && cd /pypi
$ ls -la
-rw-r--r-- 1 pavel staff 237954 Apr 19 11:31 Flask-WTF-0.6.tar.gz
-rw-r--r-- 1 pavel staff 389741 Feb 22 17:10 Jinja2-2.6.tar.gz
-rw-r--r-- 1 pavel staff 70305 Apr 11 00:28 MySQL-python-1.2.3.tar.gz
-rw-r--r-- 1 pavel staff 2597214 Apr 10 18:26 SQLAlchemy-0.7.6.tar.gz
-rw-r--r-- 1 pavel staff 1108056 Feb 22 17:10 Werkzeug-0.8.2.tar.gz
-rw-r--r-- 1 pavel staff 488207 Apr 10 18:26 boto-2.3.0.tar.gz
-rw-r--r-- 1 pavel staff 490192 Apr 16 12:00 flask-0.9-dev-2a6c80a.tar.gz
Certains paquets doivent être archivés à la main dans des tarballs de même apparence. Je le fais souvent quand je veux une version plus récente (moins stable) de quelque chose. Certains paquets ne sont pas sur PYPI, donc la même chose s'applique à eux.
Supposons que vous ayez une application Python correctement formée dans ~/src/myapp
. ~/src/myapp/setup.py
aura install_requires
liste qui mentionne une ou plusieurs choses que vous avez dans votre /pypi
répertoire. Comme ceci :
install_requires=[
'boto',
'Flask',
'Werkzeug',
# and so on
Si vous voulez être en mesure d'exécuter votre application avec toutes les dépendances nécessaires tout en continuant à la modifier, vous ferez quelque chose comme ceci :
$ cd ~/src/myapp
$ python setup.py develop --always-unzip --allow-hosts=None --find-links=/pypi
De cette façon, votre application sera exécutée directement depuis votre répertoire source. Vous pouvez modifier certaines choses, puis relancer l'application sans rien reconstruire.
Si vous voulez installer votre application et ses dépendances dans l'environnement python actuel, vous ferez quelque chose comme ceci :
$ cd ~/src/myapp
$ easy\_install --always-unzip --allow-hosts=None --find-links=/pypi .
Dans les deux cas, la construction échouera si une ou plusieurs dépendances ne sont pas présentes dans le dossier de l'utilisateur. /pypi
répertoire. Il n'essaiera pas d'installer de manière aléatoire les éléments manquants depuis Internet.
Je recommande vivement d'invoquer setup.py develop ...
y easy_install ...
dans le cadre d'une environnement virtuel pour éviter de contaminer votre environnement global Python. C'est (virtualenv c'est-à-dire) à peu près la voie à suivre. N'installez jamais rien dans l'environnement global de Python.
Si la machine sur laquelle vous avez construit votre application a la même architecture que la machine sur laquelle vous voulez la déployer, vous pouvez simplement mettre en archive le répertoire complet de l'environnement virtuel dans lequel vous avez installé votre application. easy_install
- tout. Cependant, juste avant la mise en place de l'archive, vous devez rendre le répertoire de l'environnement virtuel relocalisable (cf. -relocalisable option). NOTE : la machine de destination doit avoir la même version de Python d'installée, et aussi toutes les dépendances basées sur le langage C que votre application peut avoir doivent être préinstallées là aussi (par exemple, si vous dépendez de LIP alors libpng, libjpeg, etc. doivent être préinstallés).
Python hors ligne. Pour ce faire, j'utilise virtualenv (environnement Python isolé).
1) installer virtualenv en ligne avec pip :
pip install virtualenv --user
ou hors ligne avec whl : allez à ceci lien téléchargez la dernière version (.whl ou tar.gz) et installez-la avec cette commande :
pip install virtualenv-15.1.0-py2.py3-none-any.whl --user
en utilisant --user
vous n'avez pas besoin d'utiliser sudo pip…
.
2) utiliser virtualenv
sur la machine en ligne, sélectionnez un répertoire avec le terminal cd
et exécutez ce code :
python -m virtualenv myenv
cd myenv
source bin/activate
pip install Flask
après avoir installé tous les paquets, vous devez générer un fichier requirements.txt
donc, pendant que votre virtualenv est actif, écrivez
pip freeze > requirements.txt
ouvrir un nouveau terminal et créer un autre env comme myenv2
.
python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
ls
maintenant vous pouvez aller dans votre dossier hors ligne où votre requirements.txt
y tranferred_packages
se trouvent dans ce dossier. Téléchargez les paquets avec le code suivant et mettez-les tous dans le dossier tranferred_packages
dossier.
pip download -r requirements.txt
déplacez votre dossier hors ligne sur un ordinateur hors ligne, puis
python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
cd offline
pip install --no-index --find-links="./tranferred_packages" -r requirements.txt
ce qui se trouve dans le dossier hors ligne [requirements.txt , tranferred_packages {Flask-0.10.1.tar.gz, ...}].
liste de contrôle de votre paquet
pip list
note : comme nous sommes en 2017, il est préférable d'utiliser python 3. Vous pouvez créer un virtualenv python 3 avec cette commande.
virtualenv -p python3 envname
Laissez-moi vous expliquer le processus étape par étape :
-
Sur un ordinateur connecté à Internet, créez un dossier.
$ mkdir packages $ cd packages
-
ouvrez une invite de commande ou un shell et exécutez la commande suivante :
Supposons que le paquet que vous voulez est
tensorflow
$ pip download tensorflow
-
Maintenant, sur l'ordinateur cible, copiez le
packages
et appliquer la commande suivante$ cd packages $ pip install 'tensorflow-xyz.whl' --no-index --find-links '.'
Notez que le tensorflow-xyz.whl
doit être remplacé par le nom original du paquet requis.
- Réponses précédentes
- Plus de réponses