Installez un package Python dans un répertoire différent en utilisant pip?
Question
Je sais que la réponse évidente est d'utiliser virtualenv et virtualenvwrapper, mais pour diverses raisons, je ne peux pas / ne veulent pas le faire.
Alors, comment puis-je modifier la commande
pip install package_name
pour pip
installer le paquet quelque part autre que le site-packages
par défaut?
La solution
Utilisation:
pip install --install-option="--prefix=$PREFIX_PATH" package_name
Vous pouvez également utiliser --ignore-installed
pour forcer toutes les dépendances à être réinstallé en utilisant ce nouveau préfixe. Vous pouvez utiliser --install-option
à plusieurs fois pour ajouter l'une des options que vous pouvez utiliser avec python setup.py install
(--prefix
est probablement ce que vous voulez, mais il y a un tas d'autres options que vous pouvez utiliser).
Autres conseils
Le --target commutateur est la chose que vous « cherchez:
pip install --target=d:\somewhere\other\than\the\default package_name
Mais vous avez encore besoin d'ajouter à d:\somewhere\other\than\the\default
PYTHONPATH
à les utiliser réellement de cet endroit.
-t, --target
Installez les paquets dans . Par défaut, ce ne remplacera pas les fichiers existants / dossiers dans .
Utilisez --upgrade pour remplacer les packages existants dansavec les nouvelles versions.
pip Mise à niveau si le commutateur cible ne sont pas disponibles:
Sous Linux ou OS X:
pip install -U pip
Sous Windows (cela fonctionne autour un problème ):
python -m pip install -U pip
Au lieu de l'option --target
ou l'option --install-options
, j'ai trouvé que les éléments suivants fonctionne bien (de la discussion sur un bug concernant cette chose à https://github.com/pypa/pip/issues/446 ):
PYTHONUSERBASE=/path/to/install/to pip install --user
(Ou définir le répertoire PYTHONUSERBASE
dans votre environnement avant d'exécuter la commande, en utilisant export PYTHONUSERBASE=/path/to/install/to
)
Il utilise l'option --user
très utile, mais dit pour faire la bin
, lib
, share
et d'autres répertoires que vous attendez dans un préfixe personnalisé plutôt que $HOME/.local
.
Ensuite, vous pouvez ajouter à votre PATH
, PYTHONPATH
et d'autres variables comme vous le feriez dans un répertoire d'installation normale.
Notez que vous pouvez aussi avoir besoin de spécifier les options de --upgrade
et --ignore-installed
si des colis sur lesquels cela dépend exigent des versions plus récentes à installer dans le répertoire PYTHONUSERBASE
, pour remplacer les versions fournies par le système.
Un exemple complet:
PYTHONUSERBASE=/opt/mysterypackage-1.0/python-deps pip install --user --upgrade numpy scipy
.. installer les versions scipy
et package numpy
les plus récents dans un répertoire que vous pouvez inclure dans votre PYTHONPATH
comme si (en utilisant bash et 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
Utilisation virtualenv est toujours une solution meilleure et plus propre!
L'installation d'un package Python inclut souvent des fichiers Python purs. Si le paquet comprend des données, des scripts et ou exécutables, ceux-ci sont installés dans des répertoires différents des purs fichiers Python.
En supposant que votre package n'a pas de données / scripts / executables et que vous voulez vos fichiers Python pour aller dans /python/packages/package_name
(et non pas un sous-répertoire quelques niveaux inférieurs /python/packages
que lors de l'utilisation --prefix
), vous pouvez utiliser une commande de temps:
pip install --install-option="--install-purelib=/python/packages" package_name
Si vous voulez que tous (ou plus) de vos colis pour aller là-bas, vous pouvez modifier votre ~/.pip/pip.conf
pour inclure:
[install]
install-option=--install-purelib=/python/packages
De cette façon, vous ne pouvez pas oublier d'avoir à le préciser encore et encore.
Les excecutables / données / scripts inclus dans le package sera toujours aller à leur place par défaut, sauf si vous spécifiez plus d'options d'installation (--prefix
/ --install-data
/ --install-scripts
, etc., pour plus de détails regarder le installation personnalisée options).
Pour pip installer une bibliothèque exactement où je le voulais, je naviguais à l'endroit que je voulais le répertoire avec le terminal puis utilisé
pip install mylibraryName -t .
la logique dont je pris de cette page: https://cloud.google.com/appengine / docs / python / googlecloudstorageclient / télécharger
Personne ne semble avoir mentionné l'option -t mais le plus simple:
pip install -t <direct directory> <package>
Il suffit d'ajouter un point à la réponse de @Ian Bicking:
En utilisant l'option --user
pour spécifier le répertoire d'installation aussi si l'on veut installer un package Python dans un répertoire de la maison (sans droit d'utilisateur sudo) sur le serveur distant.
par exemple.
pip install --user python-memcached
La commande installera le paquet dans l'un des répertoires figurant dans votre PYTHONPATH.
Les versions plus récentes de pip
(8 ou version ultérieure) peuvent directement utiliser le option --prefix
:
pip install --prefix=$PREFIX_PATH package_name
où $PREFIX_PATH
est le préfixe d'installation où lib, bin et d'autres dossiers de niveau supérieur sont placés.
testé ces options avec python3.5 et pépin 9.0.3:
pip installer --target / myfolder [paquets]
Installe les paquets, y compris TOUS les dépendances sous / myfolder. Ne tient pas compte du fait que les paquets dépendants sont déjà installés ailleurs en Python. Vous trouverez des forfaits de / myfolder / [package_name]. Si vous avez plusieurs versions Python, cela ne prend pas en compte (pas de version Python dans le nom du dossier du package).
pip installer prefix / myfolder [paquets]
Les contrôles sont déjà installés dépendances. Installera des paquets dans /myfolder/lib/python3.5/site-packages/[packages]
pip installer --root / myfolder [paquets]
dépendances contrôles comme prefix mais l'emplacement d'installation sera /myfolder/usr/local/lib/python3.5/site-packages/[package_name].
pip install --user [packages]
installera des paquets dans $ HOME: /home/[USER]/.local/lib/python3.5/site-packages Recherches Python automatiquement à partir de ce chemin .local de sorte que vous n'avez pas besoin de le mettre à votre PYTHONPATH.
=> Dans la plupart des cas --user est la meilleure option à utiliser. Dans le cas où le dossier à domicile ne peut pas être utilisé en raison de quelque raison que ce prefix.
pip install packageName -t pathOfDirectory
ou
pip install packageName --target pathOfDirectorty
Pour ajouter à la déjà de bons conseils, comme je l'ai eu un problème d'installer IPython quand je didn « t ont des permissions d'écriture à /usr/local
.
utilise pip distutils pour faire son installation et de ce fil de discute comment cela peut causer un problème car il repose sur le réglage sys.prefix
.
Mon problème est arrivé lorsque le IPython install a essayé d'écrire '/ usr / local / share / man / man1' avec Autorisation refusée . Comme l'installation a échoué, il ne semble pas écrire les fichiers ipython dans le répertoire bin.
Utilisation de « --user » travaillé et les fichiers ont été écrits à ~ / .local. Ajout ~ / .local / bin au PATH $ signifiait que je pouvais utiliser "ipython" à partir de là.
Cependant, je suis en train d'installer pour un certain nombre d'utilisateurs et a reçu l'autorisation d'écriture dans le répertoire /usr/local/lib/python2.7
. J'ai créé un répertoire « bin » là-dessous et directives pour distutils ensemble:
vim ~/.pydistutils.cfg
[install]
install-data=/usr/local/lib/python2.7
install-scripts=/usr/local/lib/python2.7/bin
alors (-I
est utilisé pour forcer l'installation malgré les défaillances antérieures / .local installation):
pip install -I ipython
Alors j'ajouté /usr/local/lib/python2.7/bin
à $PATH
.
Je pensais inclure dans le cas où quelqu'un d'autre a des problèmes similaires sur une machine qu'ils n'ont pas accès à sudo.
Si vous utilisez brew avec python, malheureusement, pip / navires PIP3 avec des options très limitées. Vous n'avez pas --install-options, --target, les options --user comme mentionné ci-dessus.
Remarque sur pip installer --user
Le pépin installation normale --user est désactivé pour Python infusé. Ceci est dû à un bogue dans distutils, car Homebrew écrit un distutils.cfg qui définit le préfixe du package. Une solution possible (qui met des scripts exécutables dans le bac de ~ / Library / Python) est:python -m pip install --user --install-option="--prefix=" <package-name>
Vous trouverez peut-être cette ligne très lourde. Je suggère l'utilisation pyenv pour la gestion. Si vous utilisez
brew upgrade python python3
Ironie du sort, vous êtes en fait downgrade fonctionnalité PiP.
(je poster cette réponse, tout simplement parce que pip dans mon Mac OS X n'a ??pas l'option --target, et j'ai passé des heures le fixant)
pip install /path/to/package/
est maintenant possible.
La différence avec cela et en utilisant le -e
ou drapeau --editable
est que les liens -e
à l'endroit où le paquet est enregistré (à savoir votre dossier de téléchargement), plutôt que de l'installer dans votre chemin de python.
Cela signifie que si vous supprimer / déplacer le paquet dans un autre dossier, vous ne serez pas en mesure de l'utiliser.
Avec pépin v1.5.6
sur Python v2.7.3
(GNU / Linux), l'option --root
permet de spécifier un préfixe d'installation globale, (apparemment) sans tenir compte des options de package spécifique. Essayez f.i.
$ pip install --root=/alternative/prefix/path package_name
Je vous propose de suivre la documentation et créer ~ / .pip / fichier pip.conf. Remarque dans la documentation qu'il manque répertoire spécifié en-tête, 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 est conf:
[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
Unfortunatelly je peux installer, mais lorsque je tente de pépin désinstaller me dit qu'il n'y a pas de package pour le processus de désinstallation .... si quelque chose est encore mal, mais le paquet va à son emplacement prédéfini.