242 votes

But de #!/usr/bin/python3 shebang

J'ai remarqué cela dans quelques langages de script, mais dans cet exemple, j'utilise python. Dans de nombreux tutoriels, on commence par #!/usr/bin/python3 sur la première ligne. Je ne comprends pas pourquoi nous avons cela.

  • Le système d'exploitation ne devrait-il pas savoir qu'il s'agit d'un script python (manifestement, il est installé puisque vous y faites référence) ?
  • Que faire si l'utilisateur utilise un système d'exploitation qui n'est pas basé sur Unix ?
  • La langue est installée dans un dossier différent pour une raison quelconque.
  • L'utilisateur a une version différente. Surtout quand il ne s'agit pas d'un numéro de version complet (comme Python3 vs Python32).

Au contraire, je pourrais voir que cela casse le script de python pour les raisons énumérées ci-dessus.

381voto

Jin Points 1642

#!/usr/bin/python3 est un ligne shebang .

Une ligne shebang définit l'emplacement de l'interpréteur. Dans ce cas, la ligne python3 est situé dans /usr/bin/python3 . Une ligne shebang pourrait aussi être une bash , ruby , perl ou tout autre interprète de langage de script, par exemple : #!/bin/bash .

Sans la ligne shebang, le système d'exploitation ne sait pas qu'il s'agit d'un script python, même si vous définissez l'indicateur d'exécution ( chmod +x script.py ) sur le script et l'exécuter comme suit ./script.py . Pour que le script soit exécuté par défaut en python3, il faut soit l'invoquer en tant que python3 script.py ou définir la ligne shebang.

Vous pouvez utiliser #!/usr/bin/env python3 pour la portabilité sur différents systèmes au cas où l'interprète linguistique serait installé à différents endroits.

29voto

Mark Ransom Points 132545

C'est ce qu'on appelle un hash-bang. Si vous exécutez le script depuis l'interpréteur de commandes, il inspectera la première ligne pour déterminer quel programme doit être lancé pour interpréter le script.

Un système d'exploitation non basé sur Unix utilisera ses propres règles pour déterminer comment exécuter le script. Windows, par exemple, utilisera l'extension du nom de fichier et la balise # fera en sorte que la première ligne soit traitée comme un commentaire.

Si le chemin vers l'exécutable Python est erroné, alors naturellement le script échouera. Il est facile de créer des liens vers l'exécutable réel à partir de l'emplacement spécifié par la convention standard.

13voto

zxq9 Points 384

Cette ligne permet de trouver l'exécutable du programme qui exécutera le script. Cette notation shebang est assez standard dans la plupart des langages de script (du moins tels qu'ils sont utilisés sur les systèmes d'exploitation adultes).

Un aspect important de cette ligne est de spécifier dont sera utilisé. Sur de nombreuses distributions Linux centrées sur le développement, par exemple, il est normal d'avoir plusieurs versions de python installées en même temps.

Python 2.x et Python 3 ne sont pas compatibles à 100%, cette différence peut donc être très importante. Ainsi, #! /usr/bin/python y #! /usr/bin/python3 ne sont pas les mêmes (et aucune n'est tout à fait la même chose que #! /usr/bin/env python3 comme indiqué ailleurs sur cette page.

9voto

boardtc Points 131

Pour clarifier la façon dont la ligne shebang fonctionne pour Windows, à partir de la commande 3.7 Documentation Python :

  • Si la première ligne d'un fichier script commence par # !, elle est connue comme une ligne "shebang". Linux et d'autres systèmes d'exploitation de type Unix ont un support natif pour de telles lignes et elles sont couramment utilisées sur ces systèmes pour indiquer comment un script doit être exécuté.
  • Le Lanceur Python pour Windows permet d'utiliser les mêmes facilités avec les scripts Python sous Windows.
  • Pour permettre aux lignes shebang dans les scripts Python d'être portables entre Unix et Windows, le lanceur supporte un certain nombre de commandes 'virtuelles' pour spécifier quel interpréteur utiliser. Les commandes virtuelles supportées sont :
    • /usr/bin/env python
      • La forme /usr/bin/env de la ligne shebang a une autre propriété particulière. Avant de rechercher les interprètes Python installés, cette forme recherchera un exécutable Python dans le PATH. Cela correspond au comportement du programme env d'Unix, qui effectue une recherche PATH.
    • /usr/bin/python
    • /usr/local/bin/python
    • python

7voto

  1. Et cette ligne est comment .

  2. Il est ignoré.

  3. Il ne fonctionnera pas et devra être modifié pour pointer vers le bon emplacement. Ou env doit être utilisé.

  4. Il ne fonctionnera pas, et probablement pas sous une autre version.

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