Conclusion :courir
python -m pytest
, oupy.test-<version>
si votre alternative Python etpytest
sont 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'avoirpytest
installé pour cela. Ensuite, vous pouvez simplement exécuterpytest
.- depuis le
pip
l'exécutable est également parmi ceux qui sont commutés, vous devez passer à l'alternative Python avant l'installationpytest
pour ç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 pytest
fera n'importe lequelpython
qui se lance utilise le package depuis son installation. - Alternativement,
pytest
pour votre autre version de Python peut inclure des exécutables versionnés sur lePATH
nommépy.test-<version>
(par exemplepy.test-3
oupy.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
pyenv
La méthode suggérée semble être d'installer tous lespython
versions d'intérêt et packages pour eux sous~/.pyenv/versions
.- Cela ne s'applique pas au Python du système mais au
/usr/local
par 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/local
avec 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