1 votes

Pourquoi un binaire n'est-il pas trouvé dans mon PATH ?

J'ai un projet Python qui utilise un environnement virtuel. Dans le dossier de mon projet, il y a un bin/ qui contient tous les exécutables nécessaires au projet. Pour les utiliser, il faut exécuter source bin/activate pour insérer le chemin d'accès à cette bin/ dans votre répertoire PATH variable.

La plupart du temps, cela fonctionne comme prévu. Je lance la commande source et quand je lance which python Dans certains cas, il affiche celui que j'attendais de l'environnement virtuel. Parfois, cependant, il n'affiche pas celui-là. Il en affiche un autre sur mon PATH . Voici un exemple de ce que je vois :

Nous pouvons voir que nous sommes dans le répertoire du projet :

$ pwd
/Users/dalemy/Projects/my_project

Nous pouvons également constater que le python y python3 (en fait des liens symboliques) sont dans le répertoire bin/ répertoire :

$ ls -al /Users/dalemy/Projects/my_project/bin/python*
lrwxr-xr-x  1 dalemy  staff    7 10 Feb 15:16 /Users/dalemy/Projects/my_project/bin/python -> python3
lrwxr-xr-x  1 dalemy  staff   44 10 Feb 15:16 /Users/dalemy/Projects/my_project/bin/python3 -> /usr/local/Cellar/python/3.7.2_1/bin/python3

Ici, nous pouvons voir qu'il s'agit de la première entrée dans le fichier PATH variable :

$ echo $PATH
/Users/dalemy/Projects/my_project/bin:/Users/dalemy/.poetry/bin:/usr/local/opt/python3/bin:/usr/local/opt/ruby/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/MacGPG2/bin:/opt/X11/bin:/Users/dalemy/Config/scripts:/Users/dalemy/.poetry/bin:/Users/dalemy/.local/bin

Mais lorsque nous demandons où se trouve Python, il ne le trouve pas :

$ which python
/usr/local/bin/python

$ which python3
/usr/local/opt/python3/bin/python3

Ejecutar type -a montre la même chose :

$ type -a python
python is /usr/local/bin/python
python is /usr/bin/python
python is /usr/local/bin/python
python is /usr/bin/python

Je n'ai aucune idée de la raison pour laquelle cela se produit. Le site bin/activate la commande s'exécute hash -r et je l'ai lancé manuellement pour être sûr qu'il efface tout ce qui est en cache. Si je supprime chaque entrée de mon PATH sauf pour le premier, j'obtiens juste qu'il ne peut pas être trouvé.

Une fois qu'il commence à faire cela, la seule solution que j'ai trouvée est de supprimer complètement l'environnement virtuel et de le recréer.

Qu'est-ce qui pourrait bien se passer ici ?

0 votes

Fait /usr/local/Cellar/python/3.7.2_1/bin/python3 existent ? Si vous avez récemment mis à jour votre matériel Homebrew, ce serait /usr/local/Cellar/python/3.7.3/bin/python3 .

0 votes

C'est le cas. Il trouve très bien les produits Homebrew. Mais je ne veux pas qu'il trouve cela. Je veux qu'il trouve les binaires au début du PATH.

0 votes

Qu'est-ce que la course à pied ? type -a python y type -a python3 des sorties ?

1voto

nohillside Points 82672

Le seul moyen que j'ai trouvé pour reproduire ce que vous voyez est que le lien symbolique pointe vers un fichier inexistant. Le mieux est donc d'utiliser ls -l pour vérifier que toutes les cibles des liens symboliques existent réellement, et corriger les liens si nécessaire.

De manière plus générale : À moins que vous n'ayez vraiment besoin d'une version spécifique de python3, il est préférable de simplement exécuter

cd /Users/dalemy/Projects/my_project/bin
ln -s /usr/local/bin/python3 python3

ou simplement se fier à PATH .

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X