GNU/Linux >> Tutoriels Linux >  >> Linux

pytest en cours d'exécution avec une autre version de python

Conclusion :courir

  • python -m pytest , ou
  • py.test-<version> si votre alternative Python et pytest sont installés avec le gestionnaire de paquets système, ou
  • si votre Python alternatif a été installé avec pyenv , basculer avec pyenv à cette version et assurez-vous d'avoir pytest installé pour cela. Ensuite, vous pouvez simplement exécuter pytest .
    • depuis le pip l'exécutable est également parmi ceux qui sont commutés, vous devez passer à l'alternative Python avant l'installation pytest pour ça aussi.

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 lequel python 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 le PATH nommé py.test-<version> (par exemple py.test-3 ou py.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 !
  • pyenv La méthode suggérée semble être d'installer tous les python 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.

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


Linux
  1. Exécution du script avec ". » Et avec « source » ?

  2. Options Su - Exécuter la commande en tant qu'autre utilisateur ?

  3. Comment utiliser l'exportation avec Python sous Linux

  4. Nohup pour le script Python ne fonctionne pas lors de l'exécution en arrière-plan avec &

  5. Exécuter des scripts à partir d'un autre répertoire

Comment vérifier la version de Python sous Linux, Mac et Windows

Comment vérifier la version de Python

Comment exécuter une commande Shell avec Python

Domotique :Exécuter Home Assistant avec Podman

Comment vérifier la version du système d'exploitation avec la ligne de commande Linux

Comment installer Python 2.7 sur CentOS 7.1 ou 6.7 avec Anaconda