web-dev-qa-db-fra.com

/ usr / bin / env: ‘python3 \ r’: aucun fichier ou répertoire de ce type

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
4
young marx

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.

12
Byte Commander