web-dev-qa-db-fra.com

Pytest est dans PATH mais introuvable

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?

4
Kirk Broadhurst

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.

7
steeldriver