Que signifie «erreur: option - version unique-gérée en externe non reconnue»?


102

Il semble que j'ai soudainement commencé à rencontrer l'erreur error: option --single-version-externally-managed not recognizedlors de la création de pip installpackages de varions (y compris PyObjCet astropy). Je n'ai jamais vu cette erreur auparavant, mais elle apparaît maintenant également sur les versions de travis-ci pour lesquelles rien n'a changé.

Cette erreur indique-t-elle une distribution obsolète? Ou une option mal spécifiée dans setup.py? Ou tout autre chose?

Réponses:


84

Nouvelle mise à jour:

Installez la dernière version de setuptools. Si vous obtenez toujours l'erreur, installez wheelégalement.

pip install -U setuptools
pip install -U wheel

Réponse originale / Plus de détails:

--single-version-externally-managed est une option utilisée pour les packages Python demandant au module setuptools de créer un package Python qui peut être facilement géré par le gestionnaire de packages de l'hôte si nécessaire, comme Yum ou Apt.

Si vous voyez ce message, vous disposez peut-être d'une ancienne version de setuptools ou de Python. Essayez d'utiliser Distribute, qui est une version plus récente de setuptools et qui est rétrocompatible. Ces packages peuvent s'attendre à ce que vous l'ayez déjà.

https://pypi.python.org/pypi/distribute

Edit: À ce stade, distribuer a été fusionné dans le setuptoolsprojet principal . Installez simplement la dernière version de setuptools. Comme @wynemo l'a indiqué, vous souhaiterez peut-être utiliser l' --eggoption à la place, car elle est plus appropriée pour ceux qui font des installations manuelles où vous n'avez pas l'intention de créer un package système pour la distribution.


1
Pouvez-vous ajouter la version qui est apparue? J'utilise setuptools 0.6 et pip ne connaît pas une version plus récente. distributeça sonne bien, mais je ne peux pas l'importer ...
keflavich

Vous ne le faites pas import distribute. Distribute est un remplacement instantané et porte le même nom de module. import setuptoolsest également nécessaire pour cela.
Kelketek

La chose à faire, alors, est de s'assurer que setuptools ne remplace pas distribuer, si vous avez les deux installés. Vous devez installer distribuer avec pip, puis supprimer setuptools. J'imagine que cela devrait fonctionner.
Kelketek

17
Il faut ajouter: n'utilisez plus distribuer. Distribute a été fusionné dans le projet setuptools, il n'y en a donc plus qu'un setuptoolspour les régir tous.
Iguananaut

1
@johntex, cette réponse a été faite il y a plus d'un an, lorsque distribuer et setuptools n'avaient pas encore fusionné (ou s'ils l'avaient fait, je n'en avais pas entendu parler). Je l'ai mis à jour maintenant.
Kelketek

136

Ajouter une --eggoption

pip install --egg SCons

J'utilise la pipversion 1.4.1


10
C'était la seule solution qui a réellement aidé. Les outils pip et setuptools récents étaient déjà installés, mais je déteste cette erreur.
Michael

J'ai eu ce problème avec pyenv et cela l'a résolu.
glaucon

13
Quelqu'un peut-il expliquer en détail ce que signifie cette option et pourquoi cela fonctionne-t-il?
kawing-chiu

4
Bien que cela ait fonctionné pour moi, j'ai également eu l'erreur: "DÉPRÉCIATION: --egg est obsolète et sera supprimé à l'avenir. Cet indicateur est mutuellement exclusif avec de grandes parties de pip, et son utilisation invalide la capacité de pip à gérer le processus d'installation."
natersoz

2
no such option: --eggdans pip 18.1
gdw2

45

L'installation a wheelrésolu ce problème avec le récent pip(j'ai utilisé 8.1.2):

pip install wheel

Vous pouvez revenir à modifier si vous le souhaitez, pas de problème. Si vous connaissez la version exacte de pipet wheeloù il a été corrigé, il peut être utile de le mentionner au cas où il serait à nouveau cassé. Et aussi, la réponse n'explique pas ce qui se passe de toute façon.
anatoly techtonik

Cette réponse positive de @sparrowt a résolu mon problème
David Poxon

7

Essayez de mettre à niveau setuptools comme ceci:

pip install --upgrade setuptools


5

J'avais ce problème. Il s'est avéré que c'était un problème avec les autorisations de fichier sur mon cache pip.

Si vous voyez un message au tout début de votre sortie pip comme

The directory '/home/ubuntu/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/ubuntu/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.

vous pourriez avoir le même problème. Vous pouvez le résoudre en vous assurant que vous disposez des autorisations de fichier appropriées sur votre cache pip (quelque chose comme chown -R $(whoami) /home/ubuntu/.cache/pip) ou, si vous êtes sous UNIX, vous pouvez définir l'emplacement du cache pip avec XDG_CACHE_HOMEenv var sur un dossier que vous possédez.


Étonnamment, cela a fonctionné pour moi aussi (si vous utilisez sudopour installer le paquet, assurez-vous d'ajouter le -Hdrapeau)! Je ne vois vraiment pas quelle est la connexion entre le cache et l'erreur d'option de commande, mais tant pis.
Delgan

1

J'ai essayé les solutions ci-dessus. Cependant, je ne peux résoudre le problème que jusqu'à ce que je fasse:

sudo pip3 install -U pip (pour python3)


0

J'ai ce problème sur mon macbook également lorsque j'essaie de mettre à niveau un package python. Je vérifie la version pip sous OS X, elle est trop ancienne: 1.1. J'utilise follow cmd pour mettre à niveau pip vers la version 1.5.6

easy_install -U pip

Ensuite, cette erreur est corrigée.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.