101 votes

Notation Shebang: Scripts Python sur Windows et Linux?

J'ai quelques petits scripts utilitaires écrits en Python que je veux rendre utilisables à la fois sur Windows et Linux. Je veux éviter d'avoir à invoquer explicitement l'interpréteur Python. Y a-t-il un moyen facile de pointer la notation shebang vers les bons emplacements sur Windows et Linux? Sinon, y a-t-il un autre moyen de permettre 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?

Modification : Le support de shebang sur Windows est fourni par Cygwin, mais je veux utiliser l'interpréteur Python natif de Windows sur Windows, pas celui de Cygwin.

Modification #2 : Il semble que la notation shebang remplace les associations de fichiers dans les terminaux Cygwin. Je suppose que je pourrais simplement désinstaller Python de Cygwin et créer un lien symbolique /usr/bin/python vers Python natif de Windows.

66voto

eryksun Points 10251

Consultez le Python Launcher for Windows dans la documentation, qui a été initialement décrit dans PEP 397. Il vous permet de définir des configurations de shebang personnalisées dans "py.ini" (par exemple pour utiliser pypy), et 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". (Les guillemets sont nécessaires pour les chemins contenant des espaces.) Vous pouvez également ajouter des options en ligne de commande à un shebang. Par exemple, le shebang suivant ajoute l'option d'entrer en mode interactif après la fin du script : #!/usr/bin/python3 -i.

L'installateur associe les types de fichiers de script .py (console) et .pyw (GUI) aux lanceurs respectivement nommés py.exe et pyw.exe, afin de prendre en charge les shebangs pour les scripts dans Windows. Pour une installation pour tous les utilisateurs, les lanceurs sont installés dans le dossier Windows (c.-à-d. %SystemRoot%). Pour une installation par utilisateur, vous devrez peut-être ajouter manuellement le répertoire d'installation à PATH afin d'utiliser py.exe dans l'invite de commandes (*). Ensuite, depuis la ligne de commande, vous pouvez exécuter Python via py -2, py -3, py -2.6, py -3.3-32 (32 bits), et ainsi de suite. Le lanceur est pratique lorsqu'il est combiné avec -m pour exécuter un module en tant que script en utilisant une version particulière de l'interpréteur, par exemple py -3 -m pip install.


(*) Le nouvel installateur en 3.5+ est paramétré par défaut sur "%LocalAppData%\Programs\Python\Launcher" pour une installation par utilisateur du lanceur, au lieu de l'installer à côté de "python.exe", et il ajoute automatiquement ce répertoire à PATH.

46voto

Spencer Rathbun Points 6171

À moins que vous n'utilisiez cygwin, Windows ne prend pas en charge le shebang. Cependant, lorsque vous installez Python, il ajoute une association de fichier pour les fichiers .py. Si vous mettez simplement le nom de votre script en 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 shebang #!/usr/bin/env python dans mes scripts. Cela permet la prise en charge du shebang sous linux. Si vous l'exécutez sur une machine Windows avec Python installé, alors l'association de fichiers devrait être là, et il s'exécutera également.

4voto

Brad Points 160

Réponse courte: Le moyen le plus simple est d'installer git pour Windows qui vient avec GitBash. Ensuite, ajoutez des lignes de chevauchement dans vos scripts pour indiquer qu'ils doivent être exécutés avec python lors de l'exécution. #!/usr/bin/env python

Plus d'informations: Contrairement à Cygwin, git bash utilise vos applications windows natives et vous permet d'utiliser des scripts bash sans aucune configuration.

Il traitera automatiquement tout fichier avec une ligne de chevauchement comme exécutable de la même manière que le font les shells Linux. par exemple : #!/usr/bin/env php ou #!/usr/bin/env node ou toute autre application que vous voulez fonctionnera tant que vous ajouterez les chemins à votre chemin ENV windows.

Vous pouvez modifier les variables d'environnement dans Windows en appuyant sur Démarrer et en tapant env cela devrait être la première option.

Git bash installe également git et le relie à un gestionnaire de mots de passe pour vous et facilite grandement la connexion aux services svn activés pour 2fa et à de nombreuses autres fonctionnalités pratiques du développeur.

Git bash est, à mon avis, un must sur chaque machine de développeur.


Une autre option: Installez WSL (Windows Subsystem for Linux) qui fonctionnera de la même manière. WSL vous permet également d'installer des versions Linux natives de toutes vos applications en ligne de commande si vous préférez.

Les binaires Linux prendront le dessus sur les binaires Windows s'ils sont installés, mais vous pouvez toujours choisir d'exécuter la version Windows des commandes à tout moment en ajoutant spécifiquement .exe à la fin.

1voto

Wai Yip Tung Points 5013

Installer pywin32. Une des bonnes choses est qu'il configure l'association de fichiers *.py avec l'interpréteur Python.

1voto

John Doe Points 21

Désolé d'avoir ouvert un vieux sujet.

J'ai créé un fichier py.cmd et l'ai placé dans le dossier C:\Windows\System32.

py.bat :

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

Explication du fichier py.bat :

  1. Obtenez la première ligne du fichier *.py
  2. Retirez les caractères du shebang "#! "
  3. Exécutez le fichier python en utilisant le chemin python du shebang

Tous les scripts python Windows doivent commencer par une ligne shebang en tant que première ligne du code :

#! c:\Python27\python.exe

ou

#! c:\Python37\python.exe

Ensuite, exécutez-le : cmd> py SomePyFile.py param1 param1 paramX

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X