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
ytype -a python3
des sorties ?0 votes
Mise à jour du corps principal pour utiliser
-a
.1 votes
Le seul moyen que j'ai trouvé pour reproduire ce que vous voyez est que le lien symbolique pointe vers un fichier inexistant. Pouvez-vous, s'il vous plaît, exécuter
ls -l /usr/local/Cellar/python/3.7.2_1/bin/python3
(et par la suite pour tous les autres liens symboliques) afin de vérifier que tous les fichiers et liens existent réellement ?0 votes
Pouvez-vous vous assurer qu'aucun sous-shell n'est créé dans votre environnement virtuel ? Dans le sous-shell, votre PATH d'origine sera rétabli. Vous pouvez envisager de définir le chemin d'accès dans le fichier
~/.bashrc
afin qu'il soit disponible dans tout sous-shell invoqué.1 votes
@nohillside Vous avez tout à fait raison. Il s'agissait d'une version différente qui existait à ce moment-là, et non d'une version identique. Comme vous l'avez dit, il semble qu'une mise à jour de Homebrew ait provoqué un changement de version, et donc de chemin, cassant les liens symboliques. Si vous voulez écrire cela comme une réponse, je l'accepterai volontiers !