installation de pip /usr/local/opt/python/bin/python2.7: mauvais interpréteur: aucun fichier ou répertoire de ce type


90

Je ne sais pas quel est le problème, mais je suis coincé à suivre certaines solutions de stackoverflow qui ne mènent nulle part. Pouvez-vous m'aider à ce sujet?

  Monas-MacBook-Pro:CS764 mona$ sudo python get-pip.py
    The directory '/Users/mona/Library/Caches/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 '/Users/mona/Library/Caches/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.
    /tmp/tmpbSjX8k/pip.zip/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
    Collecting pip
      Downloading pip-7.1.0-py2.py3-none-any.whl (1.1MB)
        100% |████████████████████████████████| 1.1MB 181kB/s 
    Installing collected packages: pip
      Found existing installation: pip 1.4.1
        Uninstalling pip-1.4.1:
          Successfully uninstalled pip-1.4.1
    Successfully installed pip-7.1.0
    Monas-MacBook-Pro:CS764 mona$ pip --version
    -bash: /usr/local/bin/pip: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory

Réponses:


168

J'avais utilisé home-brew pour installer 2.7 sur OS X 10.10 et la nouvelle installation manquait les liens sym. L'Iran

brew link --overwrite python

comme mentionné dans Comment créer un lien symbolique python dans Homebrew? et cela a résolu le problème.


6
Cela m'a sauvé. FWIW, j'ai dû faire trois étapes pour réparer mon Python sur El Capitan: brew install python; brasser des linkapps python; brew link --overwrite python
Saish

comment faire l'inverse?
bubakazouba

3
revers: brasser dissocier python
Anders B

1
Juste pour ajouter à cela. J'ai trouvé que je devais exécuter "xcode-select --install" pour une raison quelconque. "brew reinstall python" ne fonctionnerait pas tant que je ne l'ai pas fait. Dans mon cas particulier, j'ai utilisé l'assistant de migration pour passer d'un ordinateur physique à l'autre. Après ces deux choses, tout a été résolu et pip3 a fonctionné.
chrisallick

Python était déjà correctement lié pour moi, ce qui a aidé était pip3 install --upgrade pipcomme l'a souligné @Excalibur dans un commentaire plus bas.
retrovertigo

56

Je suppose que vous avez deux installations python, ou deux installations pip, dont l'une a été partiellement supprimée.

Pourquoi utilisez-vous sudo? Idéalement, vous devriez pouvoir tout installer et tout exécuter à partir de votre compte utilisateur au lieu d'utiliser root. Si vous mélangez root et votre compte local, vous êtes plus susceptible de rencontrer des problèmes d'autorisations (par exemple, consultez l'avertissement qu'il donne à propos de "le répertoire parent n'appartient pas à l'utilisateur actuel").

Qu'est-ce que vous obtenez si vous exécutez ceci?

$ head -n1 /usr/local/bin/pip

Cela vous montrera quel binaire python pipessaie d'utiliser. S'il pointe /usr/local/opt/python/bin/python2.7, essayez d'exécuter ceci:

$ ls -al /usr/local/opt/python/bin/python2.7

Si cela dit "Aucun fichier ou répertoire de ce type", alors pip essaie d'utiliser un binaire python qui a été supprimé.

Ensuite, essayez ceci:

$ which python
$ which python2.7

Pour voir le chemin du binaire python qui fonctionne réellement.

Puisqu'il semble que pip a été installé avec succès quelque part, il se peut que cela /usr/local/bin/pipfasse partie d'une ancienne installation de pip qui se trouve plus haut sur le PATH. Pour tester cela, vous pouvez essayer de déplacer le pipbinaire qui ne fonctionne pas comme ceci (peut nécessiter sudo):

$ mv /usr/local/bin/pip /usr/local/bin/pip.old

Ensuite, essayez à pip --versionnouveau d' exécuter votre commande. Espérons qu'il récupère la bonne version et s'exécute avec succès.


grandes explications. Sidenote: devoir déboguer le gestionnaire de paquets d'un langage installé pour sortir un projet de mercurial est ce qui me fait perdre confiance en tout ce truc informatique. oups .. Et maintenant pour une nouvelle erreur python "AttributeError local repository"
nicolas

1
J'ai le même problème, mais cela n'a pas fonctionné pour moi, même après avoir suivi ces instructions. PIP utilise toujours un chemin incorrect. Y a-t-il une autre façon de procéder?
Adam Starrh

5
J'ai dû installer pip: sudo /usr/bin/easy_install pip- Je l'ai trouvé ici: stackoverflow.com/questions/27308234/…
Adam Starrh

Le problème est que si c'est la seule version de pip installée, vous n'avez pas de chance
einarc

55

Seule solution sous OSX et sa variante.

ln -s /usr/local/bin/python /usr/local/opt/python/bin/python2.7

1
J'ai essayé de présenter la réponse de manière transparente et simple.
TheExorcist

Ceci est susceptible d'avoir des effets secondaires sur d'autres programmes utilisant python. De plus, la fin de vie de Python 2 est le 1er janvier 2020, et ses développeurs ont indiqué que finalement (ou déjà dans certains environnements) "python" sans modificateur devrait faire référence à Python 3 python.org/dev/peps / pep-0394
kotoole

@kotoole D'après votre réponse, il semble que vos yeux peuvent voir, mais ne parviennent pas à observer, remplacez simplement python2.7 par python3.x cela fonctionnera toujours de la même manière.
TheExorcist

1
@TheExorcist malheureusement pour nous tous, Python2 et Python3 sont des langages différents. Le code écrit pour une langue se cassera lorsqu'il sera exécuté dans l'autre. Le remplacement de python par python2.7 en gros semble très susceptible de briser d'autres applications sur la route. Cette solution "fonctionne" de la même manière que la suppression de votre porte d'entrée fonctionne lorsque vous avez oublié vos clés. Cela vous permet de passer, mais ne pleurez pas lorsque votre maison commence à se remplir d'insectes.
kotoole

@kotoole bien sûr, vous avez raison, mais parfois, nous devons faire ce que nous devons faire pour le moment.
TheExorcist

32

Pépin de fixation

Pour cette erreur:

~/Library/Python/2.7/bin/pip: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory`

La source de ce problème est un mauvais chemin python codé en dur dans pip (ce qui signifie qu'il ne sera pas corrigé en changeant par exemple votre $ PATH). Ce chemin n'est plus codé en dur dans la dernière version de pip, donc une solution qui devrait fonctionner est:

pip install --upgrade pip

Mais bien sûr, cette commande utilise pip, donc elle échoue avec la même erreur.

La façon de vous sortir de ce désordre:

  1. Courir which pip
  2. Ouvrez ce fichier dans un éditeur de texte
  3. Changez la première ligne de #!/usr/local/opt/python/bin/python2.7par exemple #!/usr/local/opt/python2/bin/python2.7(notez le python2 dans le chemin), ou n'importe quel chemin vers un interpréteur python fonctionnel sur votre machine.
  4. Maintenant, pip install --upgrade pip(cela écrase votre hack et fait fonctionner pip avec la dernière version, où le problème d'interprétation devrait être résolu)

Correction de virtualenv

Pour moi, j'ai trouvé ce problème en ayant d'abord le même problème de virtualenv:

~/Library/Python/2.7/bin/virtualenv: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory`

La solution ici est de courir

pip uninstall virtualenv
pip install virtualenv

Si l'exécution de cette commande donne la même erreur à partir de pip, voir ci-dessus.


1
Oui, ayant eu Python 2.7 et 3.6 sur Mac OSX, puis mise à niveau vers 3.6, j'ai eu ce problème. C'est la solution qui a fonctionné pour moi ( pip3 install --upgrade pip)
Excalibur

Nope: pip Traceback (dernier appel en dernier): Fichier "/ usr / local / bin / pip", ligne 7, dans <module> de pip._internal import main ImportError: Aucun module nommé pip._internal
einarc

@Excalibur J'ai ajouté votre solution en commentaire sous la réponse acceptée. Merci pour ça!
retrovertigo

26

J'ai fait la même erreur en utilisant sudo pour mon installation. (Oups)

brew install python
brew linkapps python
brew link --overwrite python 

Cela a tout ramené à la normale.


21
linkapps est obsolète
Steve

15

Parce que j'avais à la fois python 2 et 3 installés sur Mac OSX, j'avais toutes sortes d'erreurs.

J'ai utilisé lequel pour trouver l'emplacement de mon fichier python2.7 (/usr/local/bin/python2.7)

which python2.7

Ensuite, j'ai lié symboliquement mon emplacement d'installation réel python2.7 avec celui que le script attendait:

ln -s /usr/local/bin/python2.7 /usr/local/opt/python/bin/python2.7

2
Gareautrain! Merci.
Brian Fegter

12

J'ai eu un problème similaire. Fondamentalement, pip cherchait un mauvais chemin (ancien chemin d'installation) ou python. La solution suivante a fonctionné pour moi:

  • J'ai vérifié où se trouve le chemin python (essayez which python)
  • J'ai vérifié la première ligne du fichier pip ( /usr/local/bin/pip2.7et /usr/local/bin/pip). La ligne doit indiquer le chemin correct vers le chemin python. Dans mon cas, non. Je l'ai corrigé et maintenant cela fonctionne très bien.

9

Au cas où cela aiderait quelqu'un, la solution mentionnée dans cette autre question a fonctionné pour moi lorsque pip a cessé de fonctionner aujourd'hui après sa mise à niveau: Pip cassé après la mise à niveau

Il semble que ce soit un problème lorsqu'un emplacement précédemment mis en cache change, vous pouvez donc actualiser le cache avec cette commande:

hash -r

9

Pour simplifier l'opération, nous pouvons utiliser la commande ci-dessous pour réinstaller la version 2:

brew install python@2

Ensuite, sur mon mac, il ressemble à ci-dessous:

▶ python -V
Python 2.7.10

▶ python2 -V
Python 2.7.14

▶ python3 -V
Python 3.6.5

▶ pip2 -V
pip 9.0.3 from /usr/local/lib/python2.7/site-packages (python 2.7)

▶ pip3 -V
pip 9.0.3 from /usr/local/lib/python3.6/site-packages (python 3.6)

▶ pip --version
pip 9.0.3 from /usr/local/lib/python2.7/site-packages (python 2.7)

1
Pour réinstaller il y a une reinstallcommande dans brew:brew reinstall python@2
Valeriy Van

4

J'ai eu le même problème. J'ai installé Python 2.7 et 3.6. Python 2.7 virtualenvfonctionnait, mais après l'installation de Python3, virtualenv a continué à rechercher la version 2.7 et ne l'a pas trouvée. Doing a pip install virtualenvinstallé la version Python3 de virtualenv.

Ensuite, pour chaque commande, si je veux utiliser Python2, j'utiliserais virtualenv --python=python2.7 somecommand


4

J'ai eu le même problème, virtualenv pointait vers un ancien chemin python. La réparation du chemin a résolu le problème:

$ virtualenv -p python2.7 env
-bash: /usr/local/bin/virtualenv: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory

$ which python2.7
/opt/local/bin/python2.7

# needed to change to correct python path
$ head  /usr/local/bin/virtualenv
#!/usr/local/opt/python/bin/python2.7 <<<< REMOVED THIS LINE
#!/opt/local/bin/python2.7 <<<<< REPLACED WITH CORRECT PATH

# now it works:
$ virtualenv -p python2.7 env
Running virtualenv with interpreter /opt/local/bin/python2.7
New python executable in env/bin/python
Installing setuptools, pip...done.

Cela a fonctionné. Mais est-ce une solution à long terme? Je remarque ce problème avec quelques autres choses, donc cela nécessiterait de le changer pour chaque instance, cela ne fonctionne plus, et je suis préoccupé par les effets à long terme de cela.
Jake T.

Certainement pas une solution à long terme. Dans mon cas, j'avais fouillé avec mon environnement python, c'est pourquoi je pense qu'il s'est retrouvé dans cette situation et j'ai cherché une solution rapide. Je soupçonne que la désinstallation de virtualenv puis sa réinstallation avec un pip python2.7 fonctionnel ferait ce bâton.
dg

2

J'ai le même problème. Si je cours brew link --overwrite python2. Il y en avait encore zsh: /usr/local/bin//fab: bad interpreter: /usr/local/opt/python/bin/python2.7: no such file or directory.

cd /usr/local/opt/
mv python2 python

Résolu! Nous pouvons maintenant utiliser le fabric de la version python2.

=== 25/07/2018 mis à jour

Il existe un moyen pratique d'utiliser la version fab de python2 lorsque votre os python est lié à python3. .shpour votre commande.

# fab python2
cd /usr/local/opt
rm python
ln -s python2 python

# use the fab cli
...

# link to python3
cd /usr/local/opt
rm python
ln -s python3 python

J'espère que cela t'aides.


2

La modification de la première ligne de ce fichier a fonctionné pour moi:

MBP-de-Jose:~ josejunior$ which python3

/usr/local/Cellar/python/3.7.3/bin/python3

MBP-de-Jose:~ josejunior$

avant

#!/usr/local/opt/python/bin/python3.7

après

#!/usr/local/Cellar/python/3.7.3/bin/python3

2

Tout ce que vous avez à faire est ... de fermer la fenêtre du terminal et d'en rouvrir une nouvelle pour résoudre ce problème.

Le problème est que le nouveau chemin python n'est pas ajouté à bashrc (la fenêtre source ou la nouvelle fenêtre de terminal aiderait).


1

Dans mon cas, j'ai décidé de supprimer l'installation homebrew python de mon mac car j'avais déjà deux autres versions de python installées sur mon mac via MacPorts. Cela a provoqué le message d'erreur.

La réinstallation de python via brew a résolu mon problème.


1
sudo /usr/bin/easy_install pip

cette commande a fonctionné pour moi


1

Pour moi, sur centOS 7, j'ai dû supprimer l'ancien lien pip de / bin en

rm /bin/pip2.7 
rm /bin/pip

puis reliez-le avec

sudo ln -s  /usr/local/bin/pip2.7 /bin/pip2.7

Puis si

/usr/local/bin/pip2.7

Fonctionne, cela devrait fonctionner


0

Vous pouvez avoir deux versions différentes de Python et pip.

Essayez de:

pip2 install --upgrade pip puis pip2 install -r requirements.txt

Ou pip3si vous utilisez une version plus récente de Python.


0

TLDR: pip trouvé dans votre chemin a est un lien symbolique et l'emplacement référencé ne contient plus l'exécutable. Vous devez mettre à jour le lien symbolique.

Cela aide à comprendre plusieurs choses.

  • Lorsque vous tapez quelque chose comme pythonou, pipvous rechercherez /etc/pathspour essayer de trouver l'exécutable associé à cette commande. Vous pouvez tout voir là-dedans en utilisant cat /etc/paths.
  • Pour déterminer l'emplacement de l'exécutable que votre shell utilisera, il existe une commande pratique which, vous pouvez taper which pythonou which pip. Cela vous indiquera l'emplacement de l'exécutable que votre shell utilisera pour cette commande.
  • Cette partie est la clé . L'emplacement peut ou non être un exécutable réel, il peut s'agir d'un lien symbolique (lien symbolique).
  • C'est commun pour /etc/pathscontenir /usr/local/bin, c'est aussi commun pour /usr/local/binêtre un tas de liens symboliques vers les exécutables réels. Pas les exécutables eux-mêmes.
  • Si l'exécutable à l'emplacement référencé des liens symboliques n'existe pas, vous obtiendrez une erreur comme bad interpreter: No such file or directory

Cela étant dit, le problème est probablement piplié à un lien symbolique et l'exécutable lié n'existe probablement plus à cet emplacement. Pour résoudre ce problème, procédez comme suit

  1. Trouvez l'emplacement de l'exécutable - which pip(donne quelque chose comme ça /usr/local/bin/pip)
  2. Vérifiez l'emplacement de référence du lien symbolique ls -l /usr/local/bin/pip | grep pip(donnez quelque chose comme ça pip -> /usr/local/opt/python@3.7/bin/pip3)
  3. Vérifiez si l'exécutable existe à l'emplacement référencé ls /usr/local/opt/python@3.7/bin/pip3(vous rencontrez ce problème donc probablement pas).
  4. Supprimer l'ancien lien symbolique rm -r /usr/local/bin/pip
  5. Trouvez la réelle pipexécutable si vous utilisez homebrewce sera /usr/local/optvous pouvez utiliser quelque chose comme ls /usr/local/opt/ | grep pythonpour le trouver.
  6. Ajoutez le lien symbolique droit pour l'exécutable pip. ln -s /usr/local/opt/python@3.7/bin/pip3 /usr/local/bin/pip
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.