Quel est le meilleur moyen de télécharger un paquet python et ses dépendances à partir de pypi pour une installation hors ligne sur une autre machine? Existe-t-il un moyen simple de faire cela avec pip ou easy_install? J'essaie d'installer la bibliothèque de requêtes sur un serveur FreeBSD qui n'est pas connecté à Internet.
Si le paquet est sur PYPI, téléchargez-le et ses dépendances dans un répertoire local. Par exemple.
.tar.gz -rw-r - r-- 1 personnel du pavillon 389741 22 février 17:10 Jinja2-2.6.tar.gz -rw-r - r-- 1 pavillon staff 70305 11 avr. 00:28 MySQL-python-1.2.3.tar.gz -rw-r - r-- 1 pavel staff 2597214 10 avr. 18:26 SQLAlchemy-0.7.6.tar.gz -rw-r - r-- 1 employé du pavillon 1108056 22 fév. 17:10 Werkzeug-0.8.2.tar.gz -rw-r - r-- 1 employé du pavillon 488207 10 avril 18:26 boto-2.3.0.tar.gz -Rw-r - r-- 1 employé du pavillon 490192 16 avril 12h00 flacon-0.9-dev-2a6c80a.tar.gz
Il se peut que certains paquets doivent être archivés manuellement dans des archives similaires. Je le fais souvent quand je veux une version plus récente (moins stable) de quelque chose. Certains packages ne sont pas sur PYPI, il en va de même pour eux.
Supposons que vous ayez une application Python correctement formée dans ~/src/myapp
. ~/src/myapp/setup.py
aura la liste install_requires
qui mentionne une ou plusieurs choses que vous avez dans votre répertoire /pypi
. Ainsi:
install_requires=[
'boto',
'Flask',
'Werkzeug',
# and so on
Si vous voulez pouvoir exécuter votre application avec toutes les dépendances nécessaires tout en piratant dessus, procédez comme suit:
$ cd ~/src/myapp $ python setup.py develop --always-unzip --allow-hosts = Aucun --find-links =/pypi
De cette façon, votre application sera exécutée directement à partir de votre répertoire source. Vous pouvez pirater des objets, puis réexécuter l'application sans rien reconstruire.
Si vous souhaitez installer votre application et ses dépendances dans l'environnement actuel python, procédez comme suit:
$ cd ~/src/myapp $ easy_install --always-unzip --allow-hosts = Aucun --find-links =/pypi.
Dans les deux cas, la construction échouera si une ou plusieurs dépendances ne sont pas présentes dans le répertoire /pypi
. Il ne tentera pas d'installer à l'aveuglette les éléments manquants sur Internet.
Je recommande fortement d'appeler setup.py develop ...
et easy_install ...
dans un environnement virtuel actif afin d'éviter de contaminer votre environnement global Python. C'est virtuellement la voie à suivre. N'installez jamais rien dans l'environnement global Python.
Si la machine sur laquelle vous avez construit votre application a la même architecture que la machine sur laquelle vous souhaitez la déployer, vous pouvez simplement archiver tout le répertoire de l'environnement virtuel dans lequel vous easy_install
tout. Juste avant de lancer l'archive, vous devez toutefois rendre le répertoire de l'environnement virtuel relogeable (voir l'option - relocatable ). REMARQUE: la machine doit avoir la même version de Python, ainsi que toutes les dépendances C de votre application. il faut également y pré-installer (par exemple, si vous dépendez de PIL , alors libpng, libjpeg, etc. doivent être préinstallés).
La commande pip download
vous permet de télécharger des packages sans les installer:
pip download -r requirements.txt
(Dans les versions précédentes de pip, ceci était orthographié pip install --download -r requirements.txt
.)
Vous pouvez ensuite utiliser pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt
pour installer ces listes téléchargées, sans accéder au réseau.
python hors ligne. pour cela, j'utilise virtualenv (environnement isolé Python)
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-le 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 le code suivant:
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 requirements.txt
afin que pendant que votre virtualenv soit actif, écrivez
pip freeze > requirements.txt
ouvrez un nouveau terminal et créez un autre env tel que myenv2
.
python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
ls
vous pouvez maintenant accéder à votre dossier hors connexion où se trouvent votre dossier requirements.txt
et tranferred_packages
. téléchargez les paquets avec le code suivant et mettez-les tous dans le dossier tranferred_packages
.
pip download -r requirements.txt
prenez votre dossier hors connexion sur un ordinateur hors connexion, puis
python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
cd offline
pip install --no-index --find-links="./tranferred_packages" -r requirements.txt
contenu du dossier hors connexion [Requirements.txt, tranferred_packages {Flask-0.10.1.tar.gz, ...}]
liste de contrôle de votre colis
pip list
remarque: comme nous sommes en 2017, il est préférable d'utiliser python 3. vous pouvez créer python 3 virtualenv avec cette commande.
virtualenv -p python3 envname
Si vous souhaitez installer python libs et leurs dépendances en mode hors connexion, terminez les étapes suivantes sur une machine disposant du même système d'exploitation, connecté au réseau, python installé:
1) Créez un fichier requirements.txt
avec le contenu suivant:
Flask==0.12
requests>=2.7.0
scikit-learn==0.19.1
numpy==1.14.3
pandas==0.22.0
2) Exécutez la commande mkdir wheelhouse && pip download -r requirements.txt -d wheelhouse
pour télécharger les bibliothèques et leurs dépendances dans le répertoire wheelhouse
3) Copiez les exigences.txt dans le répertoire wheelhouse
4) Archiver la timonerie dans wheelhouse.tar.gz
avec tar -zcf wheelhouse.tar.gz wheelhouse
Ensuite, téléchargez wheelhouse.tar.gz
sur votre ordinateur cible:
1) Exécutez tar -zxf wheelhouse.tar.gz
pour extraire les fichiers
2) Exécutez pip install -r wheelhouse/requirements.txt --no-index --find-links wheelhouse
pour installer les bibliothèques et leurs dépendances
Téléchargez le archive , transférez-le sur votre machine FreeBSD et extrayez-le, puis lancez python setup.py install
et vous avez terminé!
EDIT: Juste pour ajouter ça, vous pouvez aussi installer les archives avec pip maintenant.
Utilisation de wheel
packages compilés.
empaqueter:
$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ pip wheel -r requirements.txt --wheel-dir=$tempdir
$ cwd=`pwd`
$ (cd "$tempdir"; tar -cjvf "$cwd/bundled.tar.bz2" *)
copier l'archive et installer:
$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ (cd $tempdir; tar -xvf /path/to/bundled.tar.bz2)
$ pip install --force-reinstall --ignore-installed --upgrade --no-index --no-deps $tempdir/*
Remarque wheel
les packages binaires ne sont pas disponibles sur plusieurs machines.
Plus de réf. ici: https://pip.pypa.io/fr/stable/user_guide/#installation-bundles
Pour le Pip 8.1.2, vous pouvez utiliser pip download -r requ.txt
pour télécharger des packages sur votre machine locale.
J'avais un problème similaire. Et je devais le faire installer de la même manière, nous le faisons à partir de Pypi.
J'ai fait les choses suivantes:
Créez un répertoire pour stocker tous les paquets sur la machine qui ont un accès Internet.
mkdir -p /path/to/packages/
Téléchargez tous les packages sur le chemin
pip download -r requirements.txt -d /path/to/packages
Eg:- ls /root/wheelhouse/ # **/root/wheelhouse** is my **/path/to/packages/**
total 4524
-rw-r--r--. 1 root root 16667 May 23 2017 incremental-17.5.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 34713 Sep 1 10:21 attrs-18.2.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 3088398 Oct 15 14:41 Twisted-18.9.0.tar.bz2
-rw-r--r--. 1 root root 133356 Jan 28 15:58 chardet-3.0.4-py2.py3-none-any.whl
-rw-r--r--. 1 root root 154154 Jan 28 15:58 certifi-2018.11.29-py2.py3-none-any.whl
-rw-r--r--. 1 root root 57987 Jan 28 15:58 requests-2.21.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 58594 Jan 28 15:58 idna-2.8-py2.py3-none-any.whl
-rw-r--r--. 1 root root 118086 Jan 28 15:59 urllib3-1.24.1-py2.py3-none-any.whl
-rw-r--r--. 1 root root 47229 Jan 28 15:59 tqdm-4.30.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 7922 Jan 28 16:13 constantly-15.1.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 164706 Jan 28 16:14 zope.interface-4.6.0-cp27-cp27mu-manylinux1_x86_64.whl
-rw-r--r--. 1 root root 573841 Jan 28 16:14 setuptools-40.7.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 37638 Jan 28 16:15 Automat-0.7.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 37905 Jan 28 16:15 hyperlink-18.0.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 52311 Jan 28 16:15 PyHamcrest-1.9.0-py2.py3-none-any.whl
-rw-r--r--. 1 root root 10586 Jan 28 16:15 six-1.12.0-py2.py3-none-any.whl
Tar le répertoire des paquets et copiez-le sur la machine qui n'a pas accès à Internet. Alors fais,
cd /path/to/packages/
tar -cvzf packages.tar.gz . # not the . (dot) at the end
Copiez le packages.tar.gz dans la machine de destination qui n’a pas accès à Internet.
Procédez comme suit sur la machine qui n’a pas accès à Internet (en supposant que vous ayez copié les paquets tarés vers / chemin/vers/paquet / dans la machine actuelle)
cd /path/to/packages/
tar -xvzf packages.tar.gz
mkdir -p $HOME/.config/pip/
vi $HOME/.config/pip/pip.conf
et collez le contenu suivant à l'intérieur et enregistrez-le.
[global]
timeout = 10
find-links = file:///path/to/package/
no-cache-dir = true
no-index = true
Enfin, je vous suggère d’utiliser une certaine forme de virtualenv
pour installer les paquets.
virtualenv -p python2 venv # use python3, if you are on python3
source ./venv/bin/activate
pip install <package>
Vous devriez pouvoir télécharger tous les modules qui se trouvent dans le répertoire / path/to/package /.
Remarque: je ne l'ai fait que parce que je ne pouvais pas ajouter d'options ni changer la façon dont nous installons les modules. Sinon j'aurais fait
pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt