web-dev-qa-db-fra.com

Pourquoi la commande d'importation est-elle introuvable?

J'utilise la fonction input du module fileinput pour accepter le script via pipes ou input file Voici le script minimum:

finput.py

import fileinput

with fileinput.input() as f:
    for line in f:
        print(line)

Après avoir rendu ce script exécutable, j'exécute ls | ./finput.py et obtenir unexpected error message

./finput.py: line 1: import: command not found
./finput.py: line 3: syntax error near unexpected token `('
./finput.py: line 3: `with fileinput.input() as f:'

Le seul correctif que j'ai trouvé est lorsque j'ajoute #!/usr/bin/env/python3 avant l'instruction d'importation.

Mais ce problème semble être lié uniquement au module fileinput. Puisque le script suivant a bien fonctionné sans Shebang:

fruit.py

import random

fruits = ["mango", "ananas", "Apple"]
print(random.choice(fruits))

Maintenant qu'est-ce qui me manque? Pourquoi la commande import ne peut-elle pas être trouvée car la Shebang n'est pas obligatoire dans finput.py?

9
styvane

Votre besoin de dire à votre système d'exploitation qu'il s'agit d'un programme Python, sinon, il est interprété comme un script Shell (où la commande import est introuvable).

Comme vous l'avez identifié, cela se fait en utilisant une ligne Shebang:

#!/usr/bin/env python3

Cela n'est nécessaire que si vous allez exécuter votre script comme ceci: ./script.py, qui indique à votre système d'exploitation "d'exécuter cet exécutable". Pour ce faire, votre système d'exploitation doit identifier comment il est censé exécuter le programme, et il s'appuie sur la ligne Shebang pour cela (entre autres).

Cependant, si vous exécutez python script.py (ce que je suppose que vous avez fait pour fruit.py), alors Python ne demande pas à votre système d'exploitation si c'est un programme Python ou non, donc la ligne Shebang n'a pas d'importance.).

37
Thomas Orozco