J'essayais d'installer des packages Python sur un système auquel j'ai récemment eu accès. J'essayais de profiter du répertoire relativement nouveau de Python par site-packages par utilisateur et de la nouvelle option --user
. (L'option n'est actuellement pas documentée , mais elle existe pour Python 2.6+; vous pouvez voir l'aide en exécutant python setup.py install --help
.)
Quand j'ai essayé de courir
python setup.py install --user
sur n'importe quel package que j'ai téléchargé, j'ai toujours l'erreur suivante:
error: can't combine user with with prefix/exec_prefix/home or install_(plat)base
L'erreur a été extrêmement déconcertant parce que, comme vous pouvez le voir, je ne fournissait pas la --prefix
, --exec-prefix
, --install-base
ou --install-platbase
drapeaux que les options de ligne de commande. J'ai perdu beaucoup de temps à essayer de comprendre quel était le problème. Je documente ma réponse ci-dessous, dans l'espoir d'épargner à une autre pauvre âme quelques heures de rasage de yak .
la source
./configure --prefix=${HOME}
tout en ayant "user = 1" dans~/.pydistutils.cfg
. Dans ce cas, j'ai besoin de commenter temporairement "user = 1" afin que le processus d'installation puisse se terminer.Réponses:
Solution de contournement unique:
ou
Notez qu'il n'y a pas de texte (pas même d'espace) après le
=
.N'oubliez pas le
--user
drapeau.Installation de plusieurs packages:
Créez
~/.pydistutils.cfg
(ou équivalent pour votre système d'exploitation / plateforme) avec le contenu suivant:Notez qu'il n'y a pas de texte (pas même d'espace) après le
=
.Exécutez ensuite les commandes
pip install --user
ou nécessairespython setup.py install --user
. N'oubliez pas le--user
drapeau.Enfin, supprimez ou renommez ce fichier. Laisser ce fichier présent causera des problèmes lors de l'installation de packages Python à l'échelle du système (c'est-à-dire sans
--user
) en tant qu'utilisateur avec ceci~/.pydistutils.cfg
.La cause de ce problème
Cela semble être un problème avec OpenSUSE et RedHat, ce qui a conduit à un bogue dans virtualenv sur ces plates-formes.
L'erreur provient d'un fichier de configuration distutils au niveau du système (dans mon cas
/usr/lib64/python2.6/distutils/distutils.cfg
) où il y avait celaFondamentalement, cela équivaut à toujours exécuter la commande d'installation en tant que
install --prefix=/usr/local
. Vous devez remplacer cette spécification en utilisant l'une des techniques ci-dessus.la source
Comme cela a été noté dans les commentaires, la réponse acceptée (par @gotgenes, qui, vraisemblablement, a des gènes) peut entraîner des conséquences inattendues.
@rogeleaderr dit: "Notez que garder ce fichier comme celui-ci fera penser à Python que / est votre répertoire racine de la bibliothèque python, ce qui entraînera des problèmes déroutants si vous essayez d'installer d'autres nouveaux packages."
Plutôt que d'écrire un nouveau fichier de configuration, comme le recommande @gotgenes, une meilleure option consiste à ajouter
--prefix=
(sans texte à droite du signe égal) en tant qu'option sur la ligne de commande , comme dansla source
Publier pour gagner du temps, car aucune réponse disponible n'a fonctionné pour moi ...
Dans certains environnements, l'utilisation du commutateur
--target
(-t
) provoquera toujours la même erreur. Lors de mes tests sur deux versions de Linux, j'ai rencontré le même problème lors de l'utilisation du--prefix=
paramètre.Code:
Explication: Ma solution de contournement, qui semble fonctionner dans de nombreux environnements (MacOS, Amazon Linux, Debian), consiste à définir la
PYTHONUSERBASE
variable d'environnement sur un emplacement temporaire.--force-reinstall
est utilisé pour déclencher l'installation locale même lorsque le package est déjà installé.Cela entraînera la compilation / l'installation du module (selon le système d'exploitation et la version Python) pour:
/tmp/lib/python2.7/site-packages/*
la source
Vous pouvez simplement lancer
pip install --user .
, sans args préfixe requis.C'est de toute façon mieux car il sera par défaut python3 si votre pip est configuré pour utiliser Python 3. (j'ai oublié d'entrer
python3 setup.py
et il a installé un package 3-only sous 2.7)(crédit https://stackoverflow.com/a/1550235/4364036 )
la source
J'ai eu le même problème. Il était caché à l'intérieur du
~/.config/pip/pip.conf
avec:Une telle configuration a été créée par un script tiers à mon insu.
Je suggère de vérifier les fichiers de configuration de pip et de supprimer les
target=/foo/bar
options.la source