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
?
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).
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
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!} _
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).
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
Personne ne semble avoir mentionné l'option -t mais c'est le plus simple:
pip install -t <direct directory> <package>
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.
Les versions plus récentes de pip
(8 ou ultérieur) peuvent directement utiliser l'option --prefix
:
pip install --prefix=$PREFIX_PATH package_name
où $PREFIX_PATH
est le préfixe d'installation où sont placés lib, bin et d'autres dossiers de niveau supérieur.
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.
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.
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.
pip install packageName -t pathOfDirectory
ou
pip install packageName --target pathOfDirectorty
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)
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
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.