web-dev-qa-db-fra.com

Notation Shebang: Python Scripts sur Windows et Linux?

J'ai quelques petits scripts utilitaires écrits en Python que je veux être utilisable à la fois sur Windows et Linux. Je veux éviter d'avoir à invoquer explicitement l'interpréteur Python . Existe-t-il un moyen simple de pointer la notation Shebang vers les emplacements corrects sous Windows et Linux? Sinon, existe-t-il un autre moyen d'autoriser l'invocation implicite de l'interpréteur Python sur Windows et Linux sans avoir à modifier le script lors du transfert entre les systèmes d'exploitation?

Edit: Le support Shebang sur Windows est fourni Cygwin, mais je veux utiliser l'interpréteur natif Windows Python sur Windows, pas celui Cygwin.

Edit # 2: Il semble que la notation Shebang remplace les associations de fichiers dans les terminaux Cygwin. Je suppose que je pourrais simplement désinstaller Cygwin Python et symlink/usr/bin/python vers Python natif de Windows.

57
dsimcha

Renseignez-vous sur le Python Launcher pour Windows dans la documentation, qui était initialement décrit dans PEP 397 . Il vous permet de définir des configurations Shebang personnalisées dans un ini (par exemple pour utiliser pypy), mais dès la sortie de la boîte, vous pouvez utiliser des shebangs virtuels tels que #!/usr/bin/env python3, ou des shebangs avec des chemins réels tels que #!"C:\Python33\python.exe" (la citation est obligatoire pour les chemins contenant des espaces). Vous pouvez également ajouter des options de ligne de commande à un Shebang. Par exemple, le Shebang suivant ajoute l'option pour entrer en mode interactif une fois le script terminé: #!/usr/bin/python3 -i.

Python 3.3 associe les types de fichiers de script .py (console) et .pyw (GUI) aux lanceurs respectivement nommés, py.exe et pyw.exe, pour activer la prise en charge Shebang des scripts sous Windows. Les nouveaux lanceurs sont installés dans le dossier racine de Windows (c'est-à-dire %SystemRoot%) lors de l'installation pour tous les utilisateurs. Sinon, vous souhaiterez ajouter le répertoire d'installation à PATH afin d'utiliser py.exe dans le shell. Ensuite, à partir de la ligne de commande, vous pouvez exécuter py -2, py -3, py -2.6, py -3.3-32 (32 bits), etc. Le lanceur est pratique lorsqu'il est combiné avec -m pour exécuter un module en tant que script, par exemple py -3 -m pip install.

Il existe également une version de pylauncher qui peut être installée séparément si vous utilisez uniquement Python 2.

33
Eryk Sun

Sauf si vous utilisez cygwin, Windows ne prend pas en charge Shebang. Cependant, lorsque vous installez python, il s'ajoute en tant qu'association de fichiers pour les fichiers .py. Si vous mettez juste le nom de votre script sur la ligne de commande, ou double-cliquez dessus dans l'Explorateur Windows, il s'exécutera via python.

Ce que je fais, c'est inclure un #!/usr/bin/env python Shebang dans mes scripts. Cela permet la prise en charge de Shebang sur Linux. Si vous l'exécutez sur une machine Windows avec python installé, alors l'association de fichiers devrait être là, et elle s'exécutera également.

32
Spencer Rathbun

Installez pywin32. Une des bonnes choses est qu'il configure l'association de fichiers de * .py à l'interpréteur python.

1
Wai Yip Tung

Pas avec Shebang ... mais vous pourriez être en mesure de mettre en place une association de fichiers, voir cette SO question qui traite de Perl et les réponses associées qui seront également pertinent car il y a des problèmes connus avec Windows et la redirection stdin/out ...

0
Chris J

désolé pour l'ancien sujet ouvert.

Je crée un fichier py.cmd et placez-le dans le C:\Windows\System32 dossier

py.bat:

@(
@set /p Shebang=
)<%1
@set Shebang=%Shebang:#! =%
@%Shebang% %1 %2 %3 %4 %5 %6 %7 %8 %9

py.bat le fichier explique:

  1. Obtenez la première ligne de *.py fichier
  2. Supprimer les caractères Shebang "#! "
  3. Exécutez le fichier python en utilisant Shebang python path

Toutes les fenêtres python doit commencer par la ligne Shebang comme première ligne du code:

#! c:\Python27\python.exe

ou

#! c:\Python37\python.exe

Exécutez-le ensuite: cmd> py SomePyFile.py param1 param1 paramX

0
John Doe