J'ai installé pytest pour le test python, mais l'erreur No such file or directory
se produit lorsque je tente simplement de l'exécuter à partir d'un dossier de projet.
Il se trouve dans un emplacement qui devrait être accessible via la variable PATH
, mais (dans la mesure de mes possibilités pour décrire le problème) n'est pas "détecté". Pour une raison quelconque, lorsque je tape "pytest", mon Shell cherche le mauvais emplacement; si je spécifie l'emplacement, alors pytest fonctionnera bien.
Regarder dans /usr/bin
kirk@kirk:~/develop/foo$ pytest
bash: /usr/bin/pytest: No such file or directory
C'est en fait dans /usr/local/bin
, qui fait partie du chemin et fonctionne lorsque j'appelle explicitement cet emplacement.
kirk@kirk:~/develop/foo$ whereis pytest
pytest: /usr/local/bin/pytest
kirk@kirk:~/develop/foo$ echo $PATH
/home/kirk/bin:/home/kirk/.local/bin:/usr/local/sbin:/usr/local/bin:
/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
kirk@kirk:~/develop/foo$ /usr/local/bin/pytest
============================= test session starts ==============================
platform linux2 -- Python 2.7.12, pytest-3.0.5, py-1.4.32, pluggy-0.4.0
rootdir: /home/kirk/develop/foo, inifile: pytest.ini
collected 0 items
========================= no tests ran in 0.00 seconds =========================
Qu'est-ce qui peut causer ce comportement?
Pour éviter de rechercher votre PATH
chaque fois qu'une commande exécutable est appelée, bash
enregistre les commandes précédemment utilisées dans une table de recherche ou hash.
Si vous déplacez par la suite l'exécutable ou installez une autre version ailleurs sur la PATH
, il est parfois nécessaire de forcer le Shell à "oublier" l'ancien emplacement - en exécutant help hash
dans le shell bash:
-r forget all remembered locations
ou d'oublier une seule commande
hash -d <command>
Dans ce cas, vous semblez avoir eu une version précédente de pytest
sur /usr/bin/pytest
: en cours d'exécution hash -r pytest
obligé le Shell à réexaminer votre PATH
et à trouver son emplacement actuel /usr/local/bin/pytest
.