J'ai un script tiers qui utilise le Shebang #!/usr/bin/env python
.
Selon la documentation python, c'est la forme correcte pour les scripts qui conviennent à la fois Python v2 et Python v3 ( https://docs.python.org/3/using/windows.html#Shebang-lines ).
Mon Ubuntu (WSL) a seulement Python 3 installé:
~❯ which python
~❯ which python3
/usr/bin/python3
J'ai ajouté ceci au chemin, en ajoutant ce qui suit dans mon ~/.bashrc
Et en le sélectionnant
export PATH=/usr/bin/python3:${PATH}
export PY_PYTHON=3 # also added this for good measure, but no joy
~❯ . ~/.bashrc
~❯ env | grep PATH
PATH=/home/me/.local/bin:/home/me/bin:/usr/bin/python3:/opt/gradle/gradle-5.3.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Pourtant, lorsque j'exécute ce script, il se plaint de ne pas trouver Python. J'ai créé un court fichier de test foo
qui contient le même Shebang et une print("Hello")
:
~❯ ./foo
/usr/bin/env: ‘python’: No such file or directory
Que puis-je faire d'autre pour que env
utilise python3?
PS: Je n'ai pas python 2, ni ne souhaite l'installer. Le script tiers README mentionne spécifiquement la prise en charge des deux Python v2 et v3, et le Shebang l'indique, comme mentionné, selon les documents Python eux-mêmes.
PPS: l'ajout d'alias ne résout pas ce problème car ils ne sont efficaces que lorsque l'utilisateur appelle python à l'invite, pas lorsque le bash lui-même exécute un script. Cette réponse à une question similaire cite explicitement ce comportement: https://askubuntu.com/a/351380/3331
PPPS: La sagesse reçue des autres questions est que la liaison symbolique n'est pas la bonne solution aux problèmes de env
(ne pas avoir de lien à portée de main uniquement ATM)
Puisque OP n'installe pas python2 et n'a pas besoin de/usr/bin/python comme python2, je suis surpris que personne n'ait mentionné la solution la plus simple.
Vous avez juste un lien symbolique python vers python3 avec Sudo ln -s python3 /usr/bin/python
, et cela fonctionnera.
Ou, configurez les alternatives comme mentionné dans le commentaire (3.6 si vous utilisez Ubuntu 18.04 sur WSL):
Sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 100
env
ne peut pas trouver python parce que env recherche python dans votre PATH
, pas sur n'importe quel shell intégré, ou alias ou Comme vous avez défini python comme utilisant EXPORT
env ne le trouvera pas, il cherchera à travers 'PATH' et résoudra python = vers/usr/bin/python (qui est python2 et n'est pas présent dans le système).
Vous pouvez vérifier tous les emplacements disponibles de python exécutable, en bash, faites:
type -a python
Vous n'avez pas de chance si vous souhaitez utiliser un alias dans Shebang car par définition, Shebang doit être un chemin complet vers l'exécutable de l'interpréteur, que l'env devrait résoudre python pour quand vous utilisez /usr/bin/env python
. Pour interpréter le script en utilisant python3, utilisez le Shebang:
#!/usr/bin/env python3