web-dev-qa-db-fra.com

Installer un paquet Python dans un autre répertoire en utilisant pip?

Je sais que la solution évidente consiste à utiliser virtualenv et virtualenvwrapper, mais pour diverses raisons, je ne peux pas/ne veux pas faire cela.

Alors, comment puis-je modifier la commande

pip install package_name

faire pip installer le paquet ailleurs que par défaut site-packages?

342
Monika Sulik

Utilisation:

pip install --install-option="--prefix=$PREFIX_PATH" package_name

Vous voudrez peut-être aussi utiliser --ignore-installed pour forcer la réinstallation de toutes les dépendances en utilisant ce nouveau préfixe. Vous pouvez utiliser --install-option plusieurs fois pour ajouter les options que vous pouvez utiliser avec python setup.py install (--prefix est probablement ce que vous voulez, mais vous pouvez en utiliser un plus grand nombre).

289
Ian Bicking

Le commutateur --target est ce que vous cherchez:

pip install --target = d:\quelque part\autre\que\le\nom du paquet par défaut

Mais vous devez toujours ajouter d:\somewhere\other\than\the\default à PYTHONPATH pour les utiliser réellement à partir de cet emplacement.


Mettre à niveau pip si le commutateur cible n'est pas disponible:

Sous Linux ou OS X:

pip install -U pip

Sous Windows (cela fonctionne autour de un problème ):

python -m pip install -U pip
400
Janusz Skonieczny

Au lieu de l’option --target ou de l’option --install-options, j’ai constaté que l’opération suivante fonctionne bien (suite à la discussion sur un bogue concernant cette chose même sur https://github.com/pypa/pip/issues/446 ):

PYTHONUSERBASE=/path/to/install/to pip install --user

(Ou définissez le répertoire PYTHONUSERBASE dans votre environnement avant d'exécuter la commande, à l'aide de export PYTHONUSERBASE=/path/to/install/to)

Ceci utilise l'option très utile --user mais lui dit de créer les répertoires bin, lib, share et les autres répertoires auxquels vous vous attendez avec un préfixe personnalisé plutôt que $HOME/.local.

Vous pouvez ensuite l'ajouter à votre variable PATH, PYTHONPATH et à d'autres variables, comme vous le feriez avec un répertoire d'installation normal.

Notez que vous devrez peut-être également spécifier les options --upgrade et --ignore-installed si l'un des packages sur lesquels cela dépend nécessite l'installation de nouvelles versions dans le répertoire PYTHONUSERBASE afin de remplacer les versions fournies par le système.

Un exemple complet:

PYTHONUSERBASE=/opt/mysterypackage-1.0/python-deps pip install --user --upgrade numpy scipy

..pour installer les versions les plus récentes des packages scipy et numpy dans un répertoire que vous pouvez ensuite inclure dans votre PYTHONPATH comme ceci (avec bash et pour python 2.6 sur CentOS 6 pour cet exemple):

export PYTHONPATH=/opt/mysterypackage-1.0/python-deps/lib64/python2.6/site-packages:$PYTHONPATH
export PATH=/opt/mysterypackage-1.0/python-deps/bin:$PATH

_ {Utiliser virtualenv reste une solution meilleure et plus simple!} _

57
David Gardner

L'installation d'un paquet Python n'inclut souvent que des fichiers Python purs. Si le package comprend des données, des scripts et/ou des exécutables, ceux-ci sont installés dans des répertoires différents des fichiers Python purs.

En supposant que votre paquet ne contient pas de données/scripts/exécutables et que vous voulez que vos fichiers Python soient placés dans /python/packages/package_name (et non dans un sous-répertoire de quelques niveaux en dessous de /python/packages comme lorsque vous utilisez --prefix), vous pouvez utiliser la commande ponctuelle:

pip install --install-option="--install-purelib=/python/packages" package_name

Si vous voulez que tous (ou la plupart) de vos paquets y aillent, vous pouvez éditer votre ~/.pip/pip.conf pour inclure:

[install]
install-option=--install-purelib=/python/packages

De cette façon, vous ne pouvez pas oublier de devoir le spécifier encore et encore.

Tous les fichiers exécutables/données/scripts inclus dans le package resteront dans leurs emplacements par défaut, sauf si vous spécifiez des options d'installation supplémentaires (--prefix/--install-data/--install-scripts, etc., pour plus de détails, reportez-vous à la section installation personnalisée options).

42
Anthon

Pour installer une bibliothèque exactement où je le voulais, j'ai navigué jusqu'à l'emplacement où je voulais le répertoire avec le terminal utilisé

pip install mylibraryName -t . 

la logique dont j'ai tiré cette page: https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download

22
user2738183

Personne ne semble avoir mentionné l'option -t mais c'est le plus simple:

pip install -t <direct directory> <package>
15
Erwan

Ajoutez simplement un point à la réponse de @Ian Bicking:

L'utilisation de l'option --user pour spécifier le répertoire installé fonctionne également si l'on souhaite installer un paquet Python dans son répertoire personnel (sans le droit d'utilisateur Sudo) sur le serveur distant.

Par exemple., 

pip install --user python-memcached

La commande installera le package dans l’un des répertoires répertoriés dans votre PYTHONPATH.

14
Good Will

Les versions plus récentes de pip (8 ou ultérieur) peuvent directement utiliser l'option --prefix :

pip install --prefix=$PREFIX_PATH package_name

$PREFIX_PATH est le préfixe d'installation où sont placés lib, bin et d'autres dossiers de niveau supérieur.

12
Mike T

Testé ces options avec python3.5 et pip 9.0.3:

pip install --target/myfolder [packages]  

Installe TOUS les paquets, y compris les dépendances, dans/myfolder. Ne tient pas compte du fait que les packages dépendants sont déjà installés ailleurs dans Python. Vous trouverez les packages dans/myfolder/[nom_package]. Si vous avez plusieurs versions de Python, cela n’en tiendra pas compte (pas de version de Python dans le nom du dossier du paquet).

pip install --prefix/myfolder [packages]

Les vérifications sont des dépendances déjà installées. Va installer les paquets dans /myfolder/lib/python3.5/site-packages/[packages]

pip install --root/myfolder [packages]

Vérifie les dépendances telles que --prefix mais l’emplacement d’installation sera /myfolder/usr/local/lib/python3.5/site-packages/[package_name].

pip install --user [packages]

Va installer les paquets dans $ HOME: /Home/[UTILISATEUR] /. Local/lib/python3.5/site-packages Python recherche automatiquement à partir de ce chemin .local afin que vous n'ayez pas besoin de le mettre à votre PYTHONPATH. 

=> Dans la plupart des cas, l'utilisateur est la meilleure option. Si le dossier de base ne peut pas être utilisé pour une raison quelconque, alors --prefix.

4
Mikko

Pour ajouter au bon conseil, j’avais un problème d’installation de IPython alors que je n’avais pas les droits d’écriture sur /usr/local.

pip utilise distutils pour effectuer son installation et ce fil explique comment cela peut poser problème, car il repose sur le paramètre sys.prefix.

Mon problème est survenu lorsque l'installation IPython a tenté d'écrire dans '/ usr/local/share/man/man1' avec Permission denied. Comme l'installation a échoué, il n'a pas semblé écrire les fichiers IPython dans le répertoire bin.

L'utilisation de "--user" a fonctionné et les fichiers ont été écrits dans ~/.local. Ajouter ~/.local/bin à $ PATH signifiait que je pouvais utiliser "ipython" à partir de là.

Cependant, j'essaie d'installer ceci pour un certain nombre d'utilisateurs et j'avais reçu une autorisation en écriture sur le répertoire /usr/local/lib/python2.7. J'ai créé un répertoire "bin" et créé des directives pour distutils:

vim ~/.pydistutils.cfg

[install]
install-data=/usr/local/lib/python2.7
install-scripts=/usr/local/lib/python2.7/bin

then (-I est utilisé pour forcer l’installation malgré les échecs précédents/installation locale):

pip install -I ipython

Puis j'ai ajouté /usr/local/lib/python2.7/bin à $PATH.

Je pensais inclure ceci au cas où quelqu'un d'autre aurait des problèmes similaires sur une machine à laquelle il n'a pas accès.

3
Stuart Brock

Je suggère de suivre la documentation et de créer le fichier ~/.pip/pip.conf. Remarque dans la documentation, il manque un répertoire d'en-tête spécifié, ce qui conduit à l'erreur suivante:

error: install-base or install-platbase supplied, but installation scheme is incomplete

Le contenu de travail complet du fichier conf est:

[install]
install-base=$HOME
install-purelib=python/lib
install-platlib=python/lib.$PLAT
install-scripts=python/scripts
install-headers=python/include
install-data=python/data

Malheureusement, je peux l'installer, mais lorsque j'essaie de désinstaller pip, il me dit qu'il n'existe aucun package de ce type pour le processus de désinstallation .... il reste donc quelque chose qui ne va pas, mais le package se place à son emplacement prédéfini.

0
kensai
pip install packageName -t pathOfDirectory

ou

pip install packageName --target pathOfDirectorty
0
kundan kaushik

Si vous utilisez de la bière avec du python, malheureusement, pip/pip3 est livré avec des options très limitées. Vous n'avez pas les options --install-option, --target, --user comme mentionné ci-dessus.

Remarque sur l'installation de pip --user 
L'installation de pip normale --user est désactivée pour Python brassé. Cela est dû à un bogue dans distutils, car Homebrew écrit un fichier distutils.cfg qui définit le préfixe du package . Une solution possible (qui place les scripts exécutables dans ~/Library/Python /./ bin) est la suivante: python -m pip install --user --install-option="--prefix=" <package-name>

Vous pourriez trouver cette ligne très lourde. Je suggère d'utiliser pyenv pour la gestion. Si vous utilisez 

brew upgrade python python3

Ironiquement, vous êtes réellement rétrogradé fonctionnalité pip.

(Je poste cette réponse simplement parce que pip dans mon mac osx ne dispose pas de l'option --target et que j'ai passé des heures à la corriger)

0
anonymous

Avec pip v1.5.6 sur Python v2.7.3 (GNU/Linux), l’option --root permet de spécifier un préfixe d’installation global (apparemment) quelles que soient les options du paquet spécifique. Essayez f.i.,

$ pip install --root=/alternative/prefix/path package_name
0
sphakka

pip install /path/to/package/

est maintenant possible. 

La différence avec ceci et l’utilisation de l’indicateur -e ou --editable réside dans le fait que -e relie à l’emplacement où le package est enregistré (c’est-à-dire votre dossier de téléchargements), plutôt que de l’installer dans votre chemin python.

Cela signifie que si vous supprimez/déplacez le package dans un autre dossier, vous ne pourrez plus l'utiliser.

0
A H