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
Mona Jalal
la source

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.

LancDec
la source
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.

Steven Kryskalla
la source
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
L'Exorciste
la source
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.

kotoole
la source
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.

DaveSaunders
la source
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
Simon Briggs
la source
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.
sahar
la source
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
Jordan
la source
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)
feuyeux
la source
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

yabrol
la source
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.
dg
la source
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.

Peter. Chen
la source
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
José Junior
la source
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).

Nithin Gaddam
la source
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.

Simon
la source
1
sudo /usr/bin/easy_install pip

cette commande a fonctionné pour moi

user9022502
la source
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

Nimr Sawafta
la source
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.

Wojciech Bednarski
la source
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/[email protected]/bin/pip3)
  3. Vérifiez si l'exécutable existe à l'emplacement référencé ls /usr/local/opt/[email protected]/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/[email protected]/bin/pip3 /usr/local/bin/pip
Glen Thompson
la source