Conclusion :courir
python -m pytest, oupy.test-<version>si votre alternative Python etpytestsont installés avec le gestionnaire de paquets système, ou- si votre Python alternatif a été installé avec
pyenv, basculer avecpyenvà cette version et assurez-vous d'avoirpytestinstallé pour cela. Ensuite, vous pouvez simplement exécuterpytest.- depuis le
pipl'exécutable est également parmi ceux qui sont commutés, vous devez passer à l'alternative Python avant l'installationpytestpour ça aussi.
- depuis le
Comme je peux le voir, /usr/bin/pytest (qui appartient au gestionnaire de paquets système python-pytest paquet) a un shebang !#/usr/bin/python puisqu'il correspond à l'installation du système python.
pyenv , comme son README.md dit, ne remplace pas /usr/bin/python - car il ne faut en effet pas le remplacer pour éviter de casser les paquets système.
Au lieu de cela, il ajoute son répertoire à PATH et y insère un lanceur (appelé "shim") qui est invoqué lorsque vous tapez "python ". Comme vous l'avez probablement deviné, ce hack est ignoré par un shebang comme ci-dessus - comme il se doit.
- Exécute
python -m pytestfera n'importe lequelpythonqui se lance utilise le package depuis son installation. - Alternativement,
pytestpour votre autre version de Python peut inclure des exécutables versionnés sur lePATHnommépy.test-<version>(par exemplepy.test-3oupy.test-3.6) selon la façon dont vous l'avez installé.- S'il provient du package d'un gestionnaire de packages système pour python non standard - comme
python36-pytest- ceci est pratiquement garanti. - J'ai vérifié que si vous installez une version avec
pip, il crée uniquement un exécutable non versionné (bien que vous puissiez en créer un vous-même). De plus, si vous installez le même package pour une version différente de Python mais avec le même--prefix, il écrasera l'exécutable existant !
- S'il provient du package d'un gestionnaire de packages système pour python non standard - comme
pyenvLa méthode suggérée semble être d'installer tous lespythonversions d'intérêt et packages pour eux sous~/.pyenv/versions.- Cela ne s'applique pas au Python du système mais au
/usr/localpar défaut peut être utilisé pour cela. - Une fois que vous passez à une version alternative de Python, il prétend créer des shims pour tous scripts (dont
pip!) qui sont actuellement installés pour cette version , donc invoquer ces scripts sans chemin exécuterait ces shims.- Ainsi, si un paquet (et donc son script) n'est pas installé pour la version alternative mais installé pour la version système, essayer d'exécuter son exécutable "échouerait" à
/usr/localavec juste le résultat que vous voyez maintenant.
- Ainsi, si un paquet (et donc son script) n'est pas installé pour la version alternative mais installé pour la version système, essayer d'exécuter son exécutable "échouerait" à
- Cela ne s'applique pas au Python du système mais au
Je voulais juste exécuter "noir" pour Python 2.7, mais je l'ai installé dans Python 3.7.9 de pyenv. Cela a fonctionné correctement avec le script /usr/local/bin/black27 :
PYENV_VERSION=3.7.9 black -t py27 "[email protected]"
Cela n'a pas fonctionné avec :
pyenv shell 3.7.9
black -t py27 "[email protected]"
ni
pyenv shell 3.7.9
pyenv exec black -t py27 "[email protected]"
J'ai trouvé cette question connexe. Pour eux, cela a fonctionné avec ceci :
python -m pytest tests/my_test.py
J'espère que ça marche