J'essaie de rendre mes fichiers .py
exécutables afin que je puisse les exécuter à l'aide de ./filename.py
, mais cela ne fonctionne pas pour moi.
Ce que j'ai fait a été d'ajouter Shebang #!/usr/bin python3
et d'utiliser la commande chmod +x filename.py
. Lorsque je lance ./filename.py
puis en tant qu'utilisateur normal, je reçois le message d'erreur ci-dessous
bash: ./filename.py: /usr/bin: bad interpreter: Permission denied
En tant que superutilisateur, il me dit plutôt ceci:
Sudo: unable to execute ./filename.py: Permission denied
En ouvrant le fichier avec la méthode habituelle (python3 filename.py
), cela fonctionne bien.
Quand j'ai changé le Shebang en #!/usr/bin/env python3
, il me dit ceci:
/usr/bin/env: ‘python3\r’: No such file or directory
Le problème sont vos caractères de fin de ligne. Votre fichier a été créé ou modifié sur un système Windows et utilise des fins de ligne de style Windows/DOS (CR + LF), alors que les systèmes Linux comme Ubuntu nécessitent des fins de ligne de style Unix.
Il existe un outil simple capable de convertir les deux styles différents pour vous, appelé dos2unix
.
Installez-le en exécutant
Sudo apt install dos2unix
Après cela, vous pouvez convertir des fichiers dans les deux sens à l’aide d’une des commandes
dos2unix /PATH/TO/YOUR/WINDOWS_FILE
unix2dos /PATH/TO/YOUR/LINUX_FILE
Exemple:
$ cat test.py
#!/usr/bin/env python3
print("ok")
$ ./test.py
/usr/bin/env: ‘python3\r’: No such file or directory
$ dos2unix test.py
dos2unix: converting file test.py to Unix format ...
$ ./test.py
ok
Pour revenir aussi à ce que vous avez essayé en premier, la ligne Shebang
#!/usr/bin python3
est bien sûr faux. Il essaie d'exécuter le fichier /usr/bin
avec python3
et le nom du fichier de votre script en tant qu'arguments. Cela doit évidemment échouer car /usr/bin
est un répertoire et aucun fichier exécutable.