web-dev-qa-db-fra.com

Python Installation hors ligne des packages

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.

121
Chris Drantz

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).

64
Pavel Repin

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.

236
Carl Meyer

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
12
cyera

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

11
chaokunyang

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.

7
dav1d

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

5
eshizhan

Pour le Pip 8.1.2, vous pouvez utiliser pip download -r requ.txt pour télécharger des packages sur votre machine locale.

3
Umut Gunebakan

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:

  1. Créez un répertoire pour stocker tous les paquets sur la machine qui ont un accès Internet.

    mkdir -p /path/to/packages/
    
  2. 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
    
  3. 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.

  4. 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
    
  5. 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
3
han solo