J'essayais d'installer Python empaquette un système auquel j'ai récemment accédé. J'essayais de tirer parti du relativement nouveau --- de Python par répertoire de site-packages utilisateur , et le nouvelle option --user
. (L'option est actuellement non 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 eu l'erreur suivante:
error: can't combine user with with prefix/exec_prefix/home or install_(plat)base
L'erreur était extrêmement troublante car, comme vous pouvez le voir, je ne fournissais pas le --prefix
, --exec-prefix
, --install-base
, ou --install-platbase
drapeaux comme 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 .
pip install --user --install-option="--prefix=" <package_name>
ou
python setup.py install --user --prefix=
Notez qu'il n'y a pas de texte (pas même d'espaces) après le =
.
N'oubliez pas le --user
drapeau.
Créer ~/.pydistutils.cfg
(ou équivalent pour votre système d'exploitation/plate-forme) avec le contenu suivant:
[install]
prefix=
Notez qu'il n'y a pas de texte (pas même d'espaces) après le =
.
Exécutez ensuite le pip install --user
ou python setup.py install --user
commandes. N'oubliez pas le --user
drapeau.
Enfin, supprimez ou renommez ce fichier. Laisser ce fichier présent entraînera des problèmes lors de l'installation de Python packages à l'échelle du système (c'est-à-dire sans --user
) en tant qu'utilisateur avec ce ~/.pydistutils.cfg
.
Cela semble être un problème avec OpenSUSE et RedHat, ce qui a conduit à n bogue dans virtualenv sur ces plateformes.
L'erreur provient d'un niveau système fichier de configuration distutils (dans mon cas /usr/lib64/python2.6/distutils/distutils.cfg
) où était ce
[install]
prefix=/usr/local
Fondamentalement, 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.
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 Python penser que/est votre répertoire racine python répertoire de bibliothèque, conduisant à des problèmes confus si vous essayez pour 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 option sur ligne de commande, comme dans
$ python setup.py install --user --prefix=
Publier pour gagner du temps, car aucune réponse disponible n'a fonctionné pour moi ...
Dans certains environnements, l'utilisation de --target
(-t
) le commutateur rencontrera 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 de --prefix=
paramètre.
Code:
PYTHONUSERBASE=/tmp/ pip install --user --force-reinstall $PACKAGE
Explication: Ma solution de contournement, qui semble fonctionner dans de nombreux environnements (MacOS, Amazon Linux, Debian) consiste à définir la variable d'environnement PYTHONUSERBASE
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/installation du module (selon le système d'exploitation et Python) en: /tmp/lib/python2.7/site-packages/*