Je sais que la réponse évidente est d'utiliser virtualenv et virtualenvwrapper, mais pour diverses raisons, je ne peux / ne veux pas le faire.
Alors, comment puis-je modifier la commande
pip install package_name
faire pip
installer le package ailleurs que par défaut site-packages
?
pip
NE PAS essayer de supprimer la version antérieure d'un répertoire non personnalisé. Par exemple - un système à l'échelle du système, où vous n'avez aucune autorisation d'écriture. Jusqu'à présent, je n'ai réussi queeasy_install
...--ignore-installed
option devrait empêcher pip d'essayer de désinstaller les packages déjà installés.mkvirtualenv --python=/usr/bin/python3.5 env_name
Réponses:
Utilisation:
Vous pouvez également utiliser
--ignore-installed
pour forcer la réinstallation de toutes les dépendances à l'aide de ce nouveau préfixe. Vous pouvez utiliser--install-option
plusieurs fois pour ajouter l'une des options que vous pouvez utiliser avecpython setup.py install
(--prefix
c'est probablement ce que vous voulez, mais il y a beaucoup plus d'options que vous pouvez utiliser).la source
pip freeze
de voir le répertoire alternatif?PYTHONPATH=$PREFIX_PATH/lib/python2.6/site-packages pip freeze
ça devrait les voir.--prefix=$PREFIX_PATH
ne semble pas permettre d'avoir le contrôle total du répertoire d'installation car il y a un suffixe spécifique au système qui y est ajouté (\Lib\site-packages
sous Windows par exemple). Existe-t-il un moyen de spécifier un répertoire spécifique?Le commutateur --target est la chose que vous recherchez:
Mais vous devez toujours ajouter
d:\somewhere\other\than\the\default
àPYTHONPATH
pour les utiliser à partir de cet emplacement.Mettez à niveau pip si le commutateur cible n'est pas disponible:
Sous Linux ou OS X:
Sous Windows (cela fonctionne autour d' un problème ):
la source
pip install --upgrade pip
!--install-option="--prefix=$PREFIX_PATH"
mentionnée par @Ian Bicking et l'--target=$PATH
option?target
est une option pip, et tout ce que vous y mettrezinstall-option
sera transmis ausetup.py install command
. Fondamentalement, l'target
emplacement des packages de sites personnalisés.--target
peut entraîner une installation partielle, car elle n'installera aucun script / fichier de données inclus dans le préfixe spécifié. Il semble que passer--prefix
avec--install-option
soit le seul moyen approprié d'avoir un contrôle total sur le préfixe des installations utilisées.Au lieu de l'
--target
option ou de l'--install-options
option, j'ai trouvé que ce qui suit fonctionne bien (d'après la discussion sur un bug concernant cette chose à https://github.com/pypa/pip/issues/446 ):(Ou définissez le
PYTHONUSERBASE
répertoire dans votre environnement avant d'exécuter la commande, en utilisantexport PYTHONUSERBASE=/path/to/install/to
)Celui - ci utilise la très utile
--user
option , mais dit pour faire lesbin
,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 devrez peut-être également spécifier les options
--upgrade
et--ignore-installed
si des packages dont cela dépend nécessitent l'installation de versions plus récentes dans lePYTHONUSERBASE
répertoire, pour remplacer les versions fournies par le système.Un exemple complet:
..pour installer les versions les plus récentes
scipy
etnumpy
package dans un répertoire que vous pouvez ensuite inclure dans votrePYTHONPATH
comme ça (en utilisant bash et pour python 2.6 sur CentOS 6 pour cet exemple):Utiliser virtualenv est toujours une solution meilleure et plus soignée!
la source
/bin
dossier pip est important , le--user
crée comme il le fait--PREFIX
alors--target
que non.--ignore-installed
est nécessaire.--editable
les installations locales.su
contourner (ce qui peut être problématique dans les conteneurs, par exemple).L'installation d'un package Python inclut souvent uniquement 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 package ne contient pas de données / scripts / exécutables, et que vous souhaitez que vos fichiers Python entrent
/python/packages/package_name
(et pas un sous-répertoire quelques niveaux ci-dessous/python/packages
comme lors de l'utilisation--prefix
), vous pouvez utiliser la commande unique:Si vous souhaitez que tous (ou la plupart) de vos packages y aillent, vous pouvez modifier votre
~/.pip/pip.conf
pour inclure:De cette façon, vous ne pouvez pas oublier d'avoir à le spécifier encore et encore.
Tous les fichiers exécutables / données / scripts inclus dans le package iront toujours à leur emplacement 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, consultez les options d' installation personnalisées ).la source
--prefix
là - bas, car j'ai un répertoire "local" sur un serveur partagé dans le répertoire personnel, et il a été utilisé comme préfixeeasy_install
avant de passer àpip
. Système$PATH
et$PYTHONPATH
ont été configurés auparavant. Au lieu de cela,install-option=--install-purelib=/blah
il y a cettetarget=/blah
option / commutateur plus récent . C'est aussi bien, mais parfois vous avez juste besoin d'un remplacement pour--prefix
, que vous utiliseriez avecsetup.py
oueasy_install
.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 puis utilisé
la logique dont j'ai tiré cette page: https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download
la source
-t
est un raccourci pour--target
Personne ne semble avoir mentionné l'option -t mais la plus simple:
la source
-t
option est la version courte de l'--target
option qui a été décrite dans une autre réponse ( stackoverflow.com/a/19404371/594053 ) :)Ajoutez simplement un point à la réponse de @Ian Bicking:
En utilisant le
--user
option pour spécifier le répertoire installé fonctionne également si l'on veut installer un paquet Python dans son répertoire personnel (sans droit d'utilisateur sudo) sur le serveur distant.Par exemple,
La commande installera le package dans l'un des répertoires répertoriés dans votre PYTHONPATH.
la source
Testé ces options avec python3.5 et pip 9.0.3:
pip install --target / myfolder [packages]
Installe TOUS les packages, y compris les dépendances sous / mon dossier. Ne prend pas en compte le fait que les packages dépendants sont déjà installés ailleurs dans Python. Vous trouverez les packages dans / myfolder / [package_name]. Si vous avez plusieurs versions de Python, cela ne prend pas cela en compte (pas de version Python dans le nom du dossier du package).
pip install --prefix / myfolder [packages]
Les vérifications sont des dépendances déjà installées. Installer les packages dans /myfolder/lib/python3.5/site-packages/[packages]
pip install --root / myfolder [packages]
Vérifie les dépendances comme --prefix mais l'emplacement d'installation sera /myfolder/usr/local/lib/python3.5/site-packages/[package_name].
pip install --user [packages]
Installe les packages dans $ HOME: /home/[USER[/.local/lib/python3.5/site-packages Python recherche automatiquement à partir de ce chemin d'accès.
=> Dans la plupart des cas, --user est la meilleure option à utiliser. Dans le cas où le dossier de départ ne peut pas être utilisé pour une raison quelconque, alors --prefix.
la source
Les versions plus récentes de
pip
(8 ou ultérieures) peuvent utiliser directement l'--prefix
option :où
$PREFIX_PATH
est le préfixe d'installation où sont placés lib, bin et autres dossiers de niveau supérieur.la source
ou
la source
Pour ajouter au déjà bon conseil, car j'ai eu un problème d'installation d' IPython alors que je n'avais pas les autorisations d'écriture sur
/usr/local
.pip utilise distutils pour effectuer son installation et ce fil de discussion explique comment cela peut provoquer un problème car il repose sur le
sys.prefix
paramètre.Mon problème s'est produit lorsque l'installation IPython a tenté d'écrire dans «/ usr / local / share / man / man1» avec l' autorisation refusée . Comme l'installation a échoué, il ne semble pas écrire les fichiers IPython dans le répertoire bin.
L'utilisation de "--user" a fonctionné et les fichiers ont été écrits dans ~ / .local. L'ajout de ~ / .local / bin au $ PATH signifiait que je pouvais utiliser "ipython" à partir de là.
Cependant, j'essaie d'installer cela pour un certain nombre d'utilisateurs et j'ai reçu une autorisation d'écriture sur le
/usr/local/lib/python2.7
répertoire. J'ai créé un répertoire "bin" en dessous et défini des directives pour distutils:puis (
-I
est utilisé pour forcer l'installation malgré les échecs précédents / installation .local):Puis j'ai ajouté
/usr/local/lib/python2.7/bin
à$PATH
.J'ai pensé l'inclure au cas où quelqu'un d'autre aurait des problèmes similaires sur une machine à laquelle il n'a pas accès à sudo.
la source
Si vous utilisez brew avec 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.
Vous pourriez trouver cette ligne très encombrante. Je suggère d'utiliser pyenv pour la gestion. Si vous utilisez
brew upgrade python python3
Ironiquement, vous êtes en train de rétrograder la fonctionnalité pip.
(Je poste cette réponse, simplement parce que pip dans mon mac osx n'a pas l'option --target, et j'ai passé des heures à le réparer)
la source
ignore-installed
raison des efforts précédents, a fonctionné pour moi:python -m pip install --user --install-option="--prefix='/myFunkyApp/lib'" --ignore-installed <package-name>
Avec pip
v1.5.6
sur Pythonv2.7.3
(GNU / Linux), l'option--root
permet de spécifier un préfixe d'installation global, (apparemment) indépendamment des options spécifiques du paquet. Essayez fi,la source
Je suggère de suivre la documentation et de créer le fichier ~ / .pip / pip.conf. Notez dans la documentation qu'il manque le répertoire d'en-tête spécifié, ce qui conduit à l'erreur suivante:
Le contenu de travail complet du fichier conf est:
Malheureusement, je peux installer, mais lorsque j'essaie de désinstaller pip me dit qu'il n'y a pas un tel package pour le processus de désinstallation .... donc quelque chose ne va pas mais le package va à son emplacement prédéfini.
la source
pip install /path/to/package/
est désormais possible.
La différence avec cela et l'utilisation de l' indicateur
-e
ou--editable
est que les-e
liens vers 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 vers un autre dossier, vous ne pourrez pas l'utiliser.
la source
J'ai trouvé un moyen simple
source - https://pip.pypa.io/en/stable/reference/pip_install/
Je l'ai essayé avec pip3 et ça marche!
la source