8
votes

en utilisant #! / usr / bin / env python3 shebang avec Windows

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".


0 commentaires

3 Réponses :


4
votes

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 s (et plusieurs autres; la valeur par défaut moderne actuelle est .COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS; .JSE; .WSF; .WSH; .MSC ). 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.


0 commentaires

8
votes

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.


3 commentaires

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.



1
votes

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')


0 commentaires