Je l’ai remarqué dans quelques langages de script, mais dans cet exemple, j’utilise Python. Dans de nombreux tutoriels, ils commencent par #!/usr/bin/python3
sur la première ligne. Je ne comprends pas pourquoi nous avons cela.
Si quelque chose, je pourrais voir cela casser le script python en raison des raisons énumérées ci-dessus.
#!/usr/bin/python3
est une ligne Shebang .
Une ligne Shebang définit l'emplacement de l'interprète. Dans ce cas, l'interprète python3
se trouve dans /usr/bin/python3
. Une ligne Shebang peut également être un bash
, Ruby
, Perl
ou tout autre interpréteur d'un 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 sur le script et l'exécutez comme suit: ./script.py
. Pour que le script soit exécuté par défaut dans python3, appelez-le en tant que python3 script.py
ou définissez la ligne Shebang.
Vous pouvez utiliser #!/usr/bin/env python3
pour la portabilité sur différents systèmes si l'interpréteur de langue est installé à différents emplacements.
Cela s'appelle un hasch-bang. Si vous exécutez le script à partir du shell, 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 de nom de fichier et le #
fera en sorte que la première ligne soit traitée comme un commentaire.
Si le chemin d'accès à l'exécutable Python est incorrect, le script échouera naturellement. Il est facile de créer des liens vers l'exécutable réel à partir de n'importe quel emplacement spécifié par la convention standard.
Cette ligne aide à trouver le programme exécutable qui exécutera le script. Cette notation Shebang est assez standard dans la plupart des langages de script (du moins telle qu’elle est utilisée sur des systèmes d’exploitation adultes).
Un aspect important de cette ligne est la spécification de qui interprète sera utilisé. Sur de nombreuses distributions Linux axées sur le développement, par exemple, il est normal que plusieurs versions de python soient installées simultanément.
Python 2.x et Python 3 n'étant pas compatibles à 100%, cette différence peut être très importante. Donc, #! /usr/bin/python
et #! /usr/bin/python3
ne sont pas identiques (et ni l'un ni l'autre sont exactement les mêmes que #! /usr/bin/env python3
, comme indiqué ailleurs sur cette page.
Et cette ligne est comment .
C'est ignoré.
Son exécution échouera et devrait être modifiée pour pointer vers le bon emplacement. Ou env
devrait être utilisé.
Son exécution échouera probablement sous une version différente, quelle qu’elle soit.
En fait, il est très compliqué de déterminer quel type de fichier est un fichier. Le système d’exploitation ne peut donc plus le savoir. Il peut faire beaucoup de suppositions basées sur -
Mais la ligne de commande ne dérange pas avec tout ça, car elle fonctionne sur un calque rétrocompatible, à partir du moment où ces absurdités fantaisistes ne voulaient rien dire. Si vous double-cliquez dessus avec certitude, un système d'exploitation moderne peut le déterminer, mais si vous l'exécutez à partir d'un terminal, alors non, car le terminal ne se soucie pas de vos API de typage de fichiers spécifiques au système d'exploitation.
En ce qui concerne les autres points. C'est une commodité, il est également possible de courir
python3 path/to/your/script
Si votre python ne se trouve pas dans le chemin spécifié, cela ne fonctionnera pas, mais nous aurons tendance à installer des choses pour que de telles choses fonctionnent, et non l'inverse. Peu importe si vous êtes sous * nix, c'est à votre Shell de décider s'il convient de considérer cette ligne, car il s'agit d'une shellcode
. Ainsi, par exemple, vous pouvez exécuter bash
sous Windows.
En fait, vous pouvez supprimer cette ligne entièrement, cela signifie simplement que l'appelant devra spécifier un interprète. De même, ne placez pas vos interprètes dans des emplacements non standard et essayez ensuite d'appeler des scripts sans fournir d'interprète.
Pour clarifier le fonctionnement de la ligne Shebang pour Windows, à partir du 3.7 Python doc :