J'essaye d'exécuter un script Python à partir de la ligne de commande en tant que commande sous Windows - donc pas d'utilisation de "Python" ou ".py". Si mon script s'appelle "testing.py", j'essaie de transformer ce nom en commande et d'appeler "testing" depuis la ligne de commande.
En parcourant la documentation, il semble que je doive utiliser ce shebang #! / usr / bin / env python
tant que j'ai Python dans mon PATH.
https://docs.python.org/3/using/ windows.html # shebang-lines
J'ai également le dossier de script dans mon PATH, donc quelque chose comme "testing.py" fonctionne actuellement à partir de la ligne de commande.
D'après la documentation et ce tutoriel, https://dbader.org/blog/how-to -make-command-line-commands-with-python
Je devrais pouvoir évoquer mon script Python simplement en "testant" si j'ai les bons chemins dans PATH et le shebang ci-dessus. Cependant, je n'arrive pas à faire fonctionner le script sans ajouter ".py".
3 Réponses :
Non, Windows ne prend pas en charge les lignes Shebang.
La documentation que vous avez liée concerne le lanceur py
installé par Python, qui peut interpréter diverses lignes shebang pour choisir une version Python avec laquelle exécuter un script.
setuptools
est capable de générer des wrapper .exes pour vos scripts Python, mais cela s'implique un peu et suppose déjà que vous avez un paquet avec un setup.py
et ainsi de suite.
Localement, si vous avez vraiment, vraiment besoin de cela, vous pouvez probablement ajouter .py
à PATHEXT
variable d'environnement , de sorte que la ligne de commande Windows recherche .py
s comme si elle recherche .exe code> s (et plusieurs autres; la valeur par défaut moderne actuelle est
.COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS; .JSE; .WSF; .WSH; .MSC code>). Cependant, cela ne fonctionnera naturellement pas pour la distribution d'applications, car tous vos utilisateurs devraient également le définir.
Ma recommandation est de m'en tenir à ce vieux python testing.py
ennuyeux, vraiment.
La réponse acceptée par @AKX est incorrecte pour Windows 10 standard Python 3, certainement dans la dernière version de Windows 10 (1903) sinon plus tôt.
(Remarque: je ne peux pas dire comment cela peut ou non fonctionner sous WSL .)
Plusieurs versions de Python sont installées (2.7, 3.6, 3.7 et plus récemment Python 3.8b1). J'utilise le shebang #! / Usr / bin / env
depuis des années dans mes scripts pour une compatibilité multiplateforme (généralement pour distinguer les scripts Py2 vs Py3).
I J'ai créé un petit script dans un dossier ( C: \ so_test \ awtest.py
):
#!/usr/bin/env python3.6 import sys print(sys.version)
Si j'exécute ceci avec awtest.py
ou juste awtest
Je reçois 3.6.x
signalé (montrant qu'il fonctionne avec Python 3.6). Si je change le shebang pour faire référence à 3.7, j'obtiens 3.7.x
signalé. Si je change le shebang en simplement #! / Usr / bin / env python3
, la dernière version de Python est installée (3.8).
Maintenant, si j'ajoute ce dossier à mon chemin ( chemin =% PATH%; C: \ so_test
dans la fenêtre de commande dans laquelle vous testez, ou dans les variables d'environnement principales (vous devrez redémarrer la fenêtre de commande si vous faites ce dernier) cependant)), je peux changer de répertoire et exécuter awtest
ou awtest.py
et ils fonctionnent toujours et font référence au dossier dans le chemin. Si je supprime le dossier de script du chemin, ces fichiers ne sont plus trouvés.
Bien que je ne m'attende pas nécessairement à ce que cela fonctionne sur Windows avant 10 ou Python 2.7, cette fonctionnalité semble être le moyen de les choses vont de l'avant.
Est-ce sous WSL ou avec un simple Python Windows?
Windows Python standard (vous ne pouvez pas utiliser WSL sans désactiver toutes les autres virtualisations normales, donc je n'ai aucun moyen de le tester. C'est dommage - WSL semble certainement intéressant.)
Ah, c'est vrai. J'ai jeté un coup d'œil - c'est parce que .py a été associé au lanceur Py qui peut interpréter les lignes de shebang de différentes manières créatives: docs.python.org/3/using/windows.html#shebang-lines - De plus, pour que awtest
fonctionne, < code> .py doit être dans PATHEXT
sur votre installation.
Vous pouvez utiliser shebang dans Windows en définissant le chemin de votre interpréteur comme première ligne du fichier (vous verrez un marqueur sur VSCode qui dit «définir comme interprète» sur cette ligne). En utilisant Windows 10, Python version 3.9 voir exemple:
#!C:/Users/waithira/AppData/Local/Programs/Python/Python39/python.exe print('hello world')