Installation de packages pip dans le dossier $ HOME

330

C'est possible? Lors de l'installation pip, installez les packages python dans mon $HOMEdossier. (par exemple, je veux installer mercurial, utiliser pip, mais à l'intérieur $HOMEau lieu de /usr/local)

Je suis avec une machine mac et j'ai juste pensé à cette possibilité, au lieu de "polluer" la mienne /usr/local, j'utiliserais ma à la $HOMEplace.

PEP370 est exactement à ce sujet. Est-ce que la création d'un ˜/.localet en fait pip install packageassez pour que ces packages soient installés uniquement dans mon dossier $ HOME?

Quelqu'un vous utilise toujours MS-DOS
la source
Avez-vous vérifié virtualenv? Vous pouvez installer des packages avec pip dans un environnement isolé.
joet3ch
2
J'y ai pensé, mais je voudrais installer certaines applications python en utilisant le python existant (2.6.1), mais au lieu d'installer dans / usr / local /, installez dans mon dossier $ HOME et ajoutez-le à $ PATH. Je veux savoir si c'est possible, et toutes les mises en garde de cette approche.
Quelqu'un vous utilise toujours MS-DOS
11
+1 pour la promotion de PEP370. Il s'agit d'une option simple mais utile que plus de gens devraient connaître.
Ned Deily
Je me battais avec un problème similaire (probablement causé par un pip mal configuré et easy_install pour deux pyhtons différents). En dernier recours, j'ai essayé d'utiliser plain $ python setup.py --user install. Et ça a marché. Le package est maintenant installé à la maison sous-répertoire et tout fonctionne comme prévu. Devra parler à mon administrateur de serveur.
Jan Vlcinsky
1
Si vous devez installer PIP, faites simplement quelque chose comme wget https://bootstrap.pypa.io/get-pip.pysuivi de python get-pip.pyet vous êtes prêt à partir. Cela pourrait être utile si vous êtes sur une machine où le PIP installé est trop ancien (c'était le cas pour moi). Voir pip.readthedocs.org/en/latest/installing.html pour plus d'informations.
Markus

Réponses:

463

Bien que vous puissiez utiliser un virtualenv, vous n'en avez pas besoin. L'astuce consiste à passer l' --userargument PEP370 au setup.pyscript. Avec la dernière version de pip, une façon de procéder est:

pip install --user mercurial

Cela devrait entraîner l' hginstallation du script $HOME/.local/bin/hget le reste du package hg $HOME/.local/lib/pythonx.y/site-packages/.

Notez que ce qui précède est vrai pour Python 2.6. Il y a eu un peu de controverse parmi les développeurs principaux de Python concernant l'emplacement du répertoire approprié sur Mac OS X pour les userinstallations de style PEP370 . Dans Python 2.7 et 3.2, l'emplacement sur Mac OS X a été changé de $HOME/.localà $HOME/Library/Python. Cela pourrait changer dans une prochaine version. Mais, pour l'instant, sur 2.7 (et 3.2, s'ils hgétaient pris en charge sur Python 3), les emplacements ci-dessus seront $HOME/Library/Python/x.y/bin/hget $HOME/Library/Python/x.y/lib/python/site-packages.

Ned Deily
la source
Bon point. Malheureusement, il existe un bogue dans Python 2.7 qui fait que PYTHONUSERBASE est ignoré pour les builds du framework OS X. Ce sera corrigé pour Python 2.7.3.
Ned Deily
1
Cela semble très intéressant. easy_installest installé dans Mac OS X par défaut, donc je n'aurais que pip installé en dehors du $HOMEdossier.
Quelqu'un vous utilise toujours MS-DOS
1
J'ai essayé de changer la PYTHONUSERBASE vers un autre emplacement. Sans succès. Comment cela se fait-il spécifiquement sur Windows?
Snerd
2
Attention, si vous faites cela et essayez ensuite d'utiliser des environnements conda, les fichiers installés dans .localseront toujours touchés en premier, ce qui peut rendre très difficile le suivi des erreurs d'importation.
tacaswell
12
Notez que sous OSX, le dossier bin du répertoire du site utilisateur n'est pas sur PATH. Cela signifie que les scripts installés par les packages dans le répertoire du site utilisateur ne seront exécutables que si vous export PATH=$PATH:~/Library/Python/X.Y/bin/.
André Caron
21

J'utiliserais virtualenv dans votre répertoire HOME.

$ sudo easy_install -U virtualenv
$ cd ~
$ virtualenv .
$ bin/pip ...

Vous pouvez alors également modifier ~/.(login|profile|bash_profile), selon ce qui convient à votre shell pour ajouter ~ / bin à votre PATH et ce pip|python|easy_installserait celui utilisé par défaut.

Ross Patterson
la source
9
Le « de facto » façon de le faire est virtualenv venv, source venv/bin/activate. Vous ne voudrez pas nécessairement utiliser toujours votre virtualenv, et en utilisant cette méthode, votre invite est préfixée (venv)lorsque vous l'utilisez.
nyuszika7h
2
@ nyuszika7h Nous savons utiliser virtualenv. Mais cela répond vraiment à la question et est une solution très soignée.
itsafire
8
@itsafire Qui est "nous"? Je vous recommande de lire en.wikipedia.org/wiki/Weasel_word
nyuszika7h
3
Quoi qu'il en soit, je ne suis pas d'accord, ce n'est pas une "bonne solution". C'est un hack inutile.
nyuszika7h
19

Vous pouvez spécifier l' -toption ( --target) pour spécifier le répertoire de destination. Voir pip install --helppour des informations détaillées. Voici la commande dont vous avez besoin:

pip install -t path_to_your_home package-name

par exemple, pour installer disons mxnet, dans mon $HOMErépertoire, je tape:

pip install -t /home/foivos/ mxnet
Foivos
la source
Obtenir une erreur distutils.errors.DistutilsOptionError: can't combine user with prefix, exec_prefix/home, or install_(plat)base. Qu'est-ce que ça veut dire?
Anthony Kong
Consultez github.com/pypa/pip/issues/3826 pour une discussion connexe. Je ne sais rien de plus à ce sujet, mais je n'ai jamais rencontré de problème dans mes environnements.
Foivos