Que faire si pip donne une DistributionError dans Homebrew

phénomène

Lorsque j'exécute la commande pip, j'obtiens une erreur comme pkg_resources.DistributionNotFound: pip == 1.5.4 et je ne peux rien faire.

Procédure de reproduction

  1. Installez Python avec Homebrew
  2. Avec un nouveau pip, faites pip install --upgrade pip

brew install python

==> Caveats
Setuptools and Pip have been installed. To update them
  pip install --upgrade setuptools
  pip install --upgrade pip

Cependant, si j'améliore le pip en fonction de cela, le pip ne fonctionnera pas. Le pip a été mis à jour, mais / usr / local / bin / pip est toujours obsolète.

Faire face

Vous pouvez démarrer pip avec python -m pip. Supprimer / usr / local / bin / pip

$ rm /usr/local/bin/pip /usr/local/bin/pip2 /usr/local/bin/pip2.7
$ python -m pip install --upgrade --force-reinstall pip

Ou

$ python -m pip install --upgrade --force-reinstall pip --no-use-wheel

Faire. Si vous utilisez cette dernière méthode, chaque fois que vous mettez à jour votre pip ou setuptools à l'avenir

$ pip install --upgrade --no-use-wheel pip setuptools

besoin de le faire.

Cause

Il s'agit d'un problème de compatibilité entre Homebrew et wheel.

Homebrew utilise pip et setuptools lors de l'installation de Python

/usr/local/Cellar/python/<version>/

Installez-le sous celui-ci et installez le lien symbolique vers la commande pip, etc. dans / usr / local / bin / .

Ensuite, écrivez le paramètre prefix = / usr / local dans distutils.cfg, et le paquet qui est normalement installé par pip install etc. est un script sous/ usr / local / bin / Assurez-vous que la bibliothèque est installée sous / local / lib / pytthon2.7 / `.

Quand je fais pip install --upgrade pip dans cet état, je veux installer le script / usr / local / bin / pip, mais il existe déjà un lien symbolique que Homebrew ne détecte pas. ..

Le comportement lorsque le lien symbolique est déjà à l'endroit où vous souhaitez installer le script, mais il est différent entre l'installation depuis wheel et l'installation depuis tar.gz, dans le cas de wheel, il ne peut pas être installé et il est ignoré, et dans le cas de tar.gz Réécrira la destination du lien du lien symbolique (c'est-à-dire le contenu de Cellar).

Les pips modernes utilisent la roue par défaut, ce qui laisse des liens symboliques pour les scripts qui essaient d'utiliser des versions plus anciennes de pips sous Cellar, ce qui les rend non amorçables.

Je ne pense pas qu'il soit bon que le comportement soit différent lors de l'utilisation de la molette et de la non-utilisation de celle-ci, mais comme il n'y a pas de réponse correcte lors de l'écrasement du lien symbolique créé en externe en premier lieu, Homebrew est pip install- Si vous autorisez -upgrade pip, je pense que vous devriez installer pip normalement depuis le début.

Postscript

J'ai émis une demande d'extraction qui corrige pip et setuptools pour arrêter de les installer dans Cellar. https://github.com/Homebrew/homebrew/pull/29926

Addendum 2

Le PR ci-dessus a été rejeté car il ne correspondait pas à la politique de base de Homebrew. Par conséquent, de la même manière que lors de l'installation à l'aide de wheel, comme dans le cas de ne pas utiliser de wheel, PR la modification à écraser (destination du lien) même si le lien symbolique correspond déjà à la destination d'installation du script est PR du côté pip, et plus tôt Il a été capturé.

Une fois que le prochain pip (1.6.0) est sorti et livré avec le Python de Homebrew, vous devriez être capable de mettre à jour normalement avec pip install --upgrade pip de la prochaine version.

Cela dit, il y a deux pépins à l'intérieur et à l'extérieur du Celler, et le script à l'intérieur est réécrit lors de l'installation à l'extérieur, ce qui est loin d'être intelligent. Sauf si vous rencontrez des problèmes particuliers, nous vous recommandons de ne pas mettre à jour votre pip et d'attendre que Homebrew se mette à jour.

De plus, les gros développeurs Python peuvent préférer créer les leurs avec MacPorts ou pyenv plutôt que Homebrew, qui est forcé par sa propre méthode. pip install --upgrade pip a été corrigé, mais pip install --user ipython etc. ne fonctionne toujours pas et je ne sais pas quels autres effets secondaires il y a autour du packaging.

Recommended Posts

Que faire si pip donne une DistributionError dans Homebrew
Que faire si une erreur de décodage Unicode se produit dans pip
Que faire si l'installation de pip échoue dans Xcode 5.1
Que faire si une erreur 0xC0000005 se produit dans tf.train.start_queue_runners ()
Que faire si vous obtenez moins zéro en Python
Que faire si vous obtenez une erreur de décodage Unicode avec l'installation de pip
Que faire si pipreqs aboutit à UnicodeDecodeError
Que faire si pip ne peut pas être installé
Que faire s'il y a un décimal dans python json .dumps
Que faire si vous ne pouvez pas installer avec pip dans l'environnement babun
Que faire lorsqu'un message d'avertissement est affiché dans la liste des pip
Que faire lorsque pip --user renvoie une erreur dans un environnement virtuel créé avec pyenv
Que faire si vous ne pouvez pas installer mysqlclient
Que faire si l'installation de pip ne parvient pas à installer les bibliothèques dépendantes
Que faire si vous obtenez une erreur "Aucune version trouvée" sur pipenv
Que faire si une erreur de codage Unicode se produit dans Sublime Text Python
Que faire si NotADirectoryError: [Errno 20] Pas un répertoire: 'xdg-settings' apparaît dans le notebook jupyter
Que faire si une erreur de version se produit dans le pilote Selenium Chrome
Que faire si yum casse
Que faire lorsque ʻarguments [0] .scrollIntoView (); `échoue dans python sélénium
Que faire si Combinaisons devient «couverture inconnue»
Que faire si `pip install matplot lib` échoue sur Mac
Que faire si vous ne pouvez pas vous connecter en tant que root
Que faire si l'installation de pip mysqlclient échoue sur MacOS
Que faire si vous obtenez une erreur Impossible de récupérer le lien métallique pour le référentiel avec yum
Que faire si vous ne pouvez pas installer pyaudio avec pip #Python
Que faire si «Sans nom: 0» est ajouté dans to_csv-> read_csv des pandas
Que faire si vous ne pouvez pas utiliser la poubelle dans Lubuntu 18.04.
Que faire si vous vous fâchez contre les `` déclarations '' doivent être une liste 2D ... dans la flèche matplotlib
Que faire si vous obtenez une erreur de remplacement obligatoire `get_config` lorsque vous essayez de model.save avec Keras
[Mémorandum] Que faire lorsqu'un avertissement apparaît après l'exécution de pip list
Que faire si PDO n'est pas trouvé dans Laravel ou CakePHP
Que faire si vous ne pouvez pas utiliser la recherche de grille de sklearn en Python
Que faire si vous vous perdez dans la référence de fichier avec FileNotFoundError
Que faire si vous vous fâchez avec TensorFlow v2 sans l'attribut "app"
Que faire si aucune documentation Python trouvée pour ... apparaît dans pydoc
Que faire lorsque TypeError se produit au minimum et au maximum de numpy
Que faire si vous obtenez Impossible de récupérer l'URL 443 avec pip
Que se passe-t-il si vous "importez A, B comme C" en Python?
[OSX] [pyenv] Que faire lorsqu'une erreur SSL se produit dans pip
Que faire lorsque le shell pipenv devient impossible
Que faire si mod_fcgid ne peut pas résoudre UnicodeEncodeError
Que faire si les rails ne fonctionnent pas
Que faire si PyInstaller3.5 provoque une erreur dans Python3.8 (TypeError: un entier est requis (obtenu les octets de type))
Que faire si l'autocomplete-python d'atome ne fonctionne pas
Que faire pour obtenir une feuille de calcul Google en Python
Que faire si Docker-sync cesse soudainement de fonctionner
Que faire si une erreur de lien symbolique se produit dans l'importation cv lors de la tentative d'installation d'OpenCV en Python
Que faire lorsqu'une erreur SSL se produit avec pip dans l'environnement Windows10, miniconda, VScode
Que faire lorsqu'un avertissement apparaît autour de l'intégration de Python dans CheckHealth de Neovim
Que faire si Scrapy ne fonctionne pas après l'installation de Scrapy avec PIP sur Mac
Solution lorsque Django ne peut pas charger d'images à partir d'un dossier statique
Que faire si vous obtenez «Python non configuré». Utilisation de PyDev dans Eclipse
Que faire si l'abandon s'affiche lors de la saisie d'une vidéo de caméra dans OpenCV
Que faire si vous obtenez une erreur en essayant d'envoyer un message dans tasks.loop () immédiatement après le démarrage
ModuleNotFoundError: No module Que faire si vous obtenez 'sensorflow.contrib'