Comment exécuter un programme Python directement?

13

Comment exécuter un programme Python directement?

J'ai créé un fichier .py (disons, mnik.py ) dans gedit. Il fonctionne bien dans le terminal.

La commande va

python3 mnik.py

Mais chaque fois que je clique sur le fichier, il est ouvert avec gedit. Je ne peux pas l'exécuter directement en cliquant.

Que faire?

Priyadarshi Paul
la source
4
@kasperd Taper python3sur la ligne de commande avec un argument est un excellent moyen d'exécuter des scripts python. C'est en fait la façon la plus simple d'exécuter un programme qui nécessite un terminal et des arguments (comme beaucoup de mes propres scripts, mais aussi des programmes comme mercurial, sphinx). Voulez-vous expliquer pourquoi ce que je fais depuis plus de 20 ans n'est pas la bonne façon?
Anthon
3
@kasperd Un script (ou programme) Python écrit correct n'a pas besoin d'avoir une ligne shebang. Si ce n'est pas le cas, c'est toujours un script Python dans tous les sens. Ce script ne peut tout simplement pas être exécuté par les shells Linux sous la forme abrégée que vous semblez préférer. Il existe également des environnements qui ne nécessitent pas du tout de scripts Python pour avoir une ligne shebang et leur permettent de démarrer le script en double-cliquant.
Anthon
1
@kasperd Ce dont le noyau a besoin pour qu'un script Python s'exécute à l'aide ./scriptnamene valide pas votre affirmation selon laquelle l'exécution d'un script à partir de la ligne de commande à l'aide de python3. Il existe différentes façons d'exécuter des scripts python et faire python3 ./mnik.pyest également une bonne façon de faire les choses, c'est juste différent (et au moins vous obtenez python3 de cette façon et non python2 comme c'est plus probable avec la plupart des réponses jusqu'à présent)
Anthon
1
L'utilisation de <language> <script> est une manière totalement valide et acceptée d'exécuter un script. Dire que c'est une mauvaise pratique devrait être désapprouvé.
Jacob Vlijm

Réponses:

26

Il y a deux choses nécessaires.

  1. Un script doit avoir une #!ligne indiquant au système d'exploitation quel interprète utiliser. Dans votre cas, votre toute première ligne dans le code doit être#!/usr/bin/env python3
  2. Vous devez ouvrir le gestionnaire de fichiers, aller dans Edition -> Préférences -> Comportement, et sélectionner quoi faire avec les fichiers exécutables

    entrez la description de l'image ici

    1. Enfin, assurez-vous que votre fichier lui-même dispose bien d'autorisations exécutables. Dans le terminal, vous pouvez le faire chmod +x /path/to/script.pyet dans l'interface graphique, faites un clic droit sur le fichier et modifiez ses propriétés -> Autorisations

    entrez la description de l'image ici

    entrez la description de l'image ici

Remarque sur la ligne Shebang

La toute première ligne est appelée ligne shebang et doit commencer par #!; ce qui vient ensuite est le nom de l'interprète qui lira votre code. Dans le cas où vous utilisez, python3vous pouvez utiliser soit #!/usr/bin/python3ou #!/usr/bin/env python3pour la portabilité. Si vous n'utilisez pas de code qui sera spécifique à la version python - utilisez simplement#!/usr/bin/env python

Remarque sur la sortie du script:

Si votre script imprime la sortie sur la console, il devra avoir une fenêtre de terminal ou utiliser des boîtes de dialogue GUI telles que zenity. Préférez utiliser l' Run in Terminaloption si vous voulez voir le code. Si vous voulez que le script fasse quelque chose sans voir la sortie de la console - utilisez l' Runoption.

entrez la description de l'image ici

De plus, si vous avez des paramètres de ligne de commande, comme sys.argv[1]dans le script, vous ne pouvez pas les définir à moins que la fenêtre de terminal ne soit ouverte.

Sergiy Kolodyazhnyy
la source
1
@PriyadarshiPaul C'est la même chose que le Filesprogramme sur le lanceur. Dans Windows- My Computer
Speak,
@PriyadarshiPaul c'est nautilusdans le Terminal
grooveplex
3
#!/usr/bin/env pythoninvoquera Python2 sur la plupart des systèmes Ubuntu. Bien que vous puissiez rendre un script Python écrit pour Python3 compatible avec Python2, je ne suppose pas que l'OP l'ait fait. #!/usr/bin/env python3semble un shebang plus approprié
Anthon
1
Et pourquoi introduisons-nous Arch Linux ici? Je trouverai peut-être un peu méchant, mais nous parlons d'Ubuntu ici. Sur Ubuntu par défaut, python est lié à python2.7 Si vous développez un logiciel, vous devez probablement savoir quels liens où, si vous utilisez autre chose que la version par défaut de votre système d'exploitation, spécifiez-le explicitement. Bien sûr, nous pouvons répondre à chaque question individuelle, mais pour crier à haute voix - si vous codez, faites-le correctement.
Sergiy Kolodyazhnyy
3

Vous devez mettre l'emplacement du programme pour exécuter votre code sur la première ligne et vous devez ensuite définir le script pour qu'il s'exécute en tant qu'exécutable en modifiant ses autorisations. Cela suppose que vous lancez vos applications à partir d'un terminal ou d'un autre script.

Trouvez votre installation Python

$ which python
/usr/bin/python

Ajoutez l'emplacement des programmes à la ligne supérieure de votre programme avec un #!devant

#!/usr/bin/python

# Python code goes here....

Définissez le script Python pour avoir des droits d'exécution

$ chmod 700 test.py

Vous pouvez maintenant exécuter le script directement

$ ./test.py

Liste de code pour test.py

#!/usr/bin/python

print "test"
Joseph
la source
2

Si vous voulez exécuter ce programme sans taper, python3 mnik.pyvous devez rendre le script exécutable et assurez-vous qu'il python3est utilisé pour l'exécuter.

Le premier que vous pouvez faire en exécutant

 chmod +x mnik.py

la seconde, vous pouvez le faire en ajoutant comme première ligne d'un script une ligne shebang qui invoque python3 . Sur tous les systèmes Ubuntu avec lesquels j'ai travaillé et fournis avec python3, vous pouvez obtenir python3 en ajoutant cette ligne en haut:

#!/usr/bin/env python3

Après ces deux changements, vous pouvez taper /path/to/mnik.py, ./mnik.pyou simplement mnik.py(ce dernier nécessite que le script soit dans votre PATH).

Si vous faites ces changements que vous pouvez également envisager de rebaptiser mnik.pyà mnik, qui est pratique courante avec les paquets Python avec des commandes qui sont publiées sur PyPI.

Anthon
la source
ok, aucun de ceux-ci ne fonctionne maintenant
Priyadarshi Paul
Ce qui est ok"? À quoi «ces» font-ils référence?
Anthon
Cela dit ** usr / bin / env: mauvais interprète: aucun fichier ou répertoire de ce type **
Priyadarshi Paul
Il y a au moins un /disparu à l'avant là-bas. Veuillez expliquer ce que c'est dans votre commentaire. Est-ce le shell bash? Est-ce Windows Command.com? De quoi invoquez-vous le programme et avec quelle syntaxe de ligne de commande?
Anthon