Quelqu'un le sait? Je n'ai jamais été capable de trouver une réponse.Pourquoi "#!/Usr/bin/env python" est-il supposé plus correct que "#!/Usr/bin/python"?
Répondre
Si vous êtes enclin à l'installation de python dans des endroits différents et intéressants sur votre PATH (comme dans $PATH
dans les shells Unix typiques, %PATH
sur les Windows typiques), en utilisant /usr/bin/env
répondra à votre caprice (bien, dans les environnements Unix-like au moins) tout en allant directement à /usr/bin/python
ne sera pas. Mais perdre le contrôle de la version de Python sous vos scripts n'est pas une bonne affaire ... si vous regardez mon code, vous êtes plus susceptible de le voir commencer par, par exemple, #!/usr/local/bin/python2.5
plutôt qu'avec un #!/usr/bin/env python
ouvert et acceptant - en supposant le script est important, je veux m'assurer qu'il fonctionne avec la version spécifique que j'ai testée et développée avec, PAS une version semi-aléatoire ;-).
Bien sûr, vous pouvez toujours utiliser #!/Usr/bin/env python2.5 pour contraindre l'ensemble des choix semi-aléatoires: =) –
+1 Bonne explication, merci! Je n'avais pas rencontré cette utilisation de "env" avant ... maintenant j'ai quelque chose à ajouter à mon sac-de-script. –
+1 pour justifier l'utilisation de "env python". Je me suis rendu compte que si je voulais utiliser "env python", je ferais mieux de coder pour le plus petit dénominateur commun, puisque je n'aurais aucun contrôle sur la version de python que l'utilisateur a dans le PATH. –
Il trouve 'python' aussi dans/usr/local/bin, ~/bin,/opt/bin, ... ou partout où il peut cacher.
merci! En fait, cela m'a causé un problème parce que, pour une raison quelconque, env n'existait pas. –
C'est un peu trompeur. Il va seulement trouver le premier "python" sur vos instances $ PATH et Python en cours sur OS X peut être assez bon à cacher. En particulier, le framework standard est construit à partir de python.org et d'autres ont des sous-répertoires "bin" dans le framework où "python" et d'autres exécutables et scripts sont stockés. Il est très facile de se retrouver avec plusieurs instances qui peuvent ou non avoir des liens symboliques dans les endroits habituels, comme/usr/local/bin et al. Gérer $ PATH sur OS X dans ce cas n'est pas aussi simple que sur les systèmes sans builds de type framework. –
@KennethReitz: si '/ usr/bin/env' n'existe pas, votre système est cassé. 'env'est un outil requis par la norme POSIX. – MestreLion
Vous pouvez trouver ce post pour intéresser: http://mail.python.org/pipermail/python-list/2008-May/661514.html
Cela peut être une meilleure explication: http://mail.python.org/pipermail/tutor/2007-June/054816.html
De wikipedia
Shebangs spécifier des chemins absolus à executables du système; cela peut causer des problèmes sur les systèmes qui ont mises en page du système de fichiers non standard
Souvent, le programme/usr/bin/env peuvent être utilisés pour contourner cette limitation
il trouve l'exécutable python dans votre environnement et utilise cela. c'est plus portable car python n'est pas toujours dans/usr/bin/python. env est toujours situé dans/usr/bin.
env n'est pas toujours là, mais nous augmentons la probabilité que le script trouve Python sur plusieurs machines. :) – Will
- 1. Pourquoi est IronPython plus rapide que le Python officiel interprète
- 2. Quel est le sélecteur le plus correct/le plus efficace?
- 3. le formatage de la version Python plus tôt que 2.6
- 4. Pourquoi TabStop ne fonctionne plus?
- 5. Pourquoi C# compile-t-il beaucoup plus vite que C++?
- 6. Pourquoi \% (\) est-il plus rapide que \ (\) dans Vim?
- 7. Pourquoi M # serait-il plus difficile pour Google que C#?
- 8. Pourquoi ce code s'exécute-t-il plus vite que prévu?
- 9. Comment RedirectToRoute est-il supposé être utilisé?
- 10. Pourquoi wxGridSizer est-il beaucoup plus lent à s'initialiser sur un wxDialog que sur un wxFrame?
- 11. Pourquoi plus de variables longues provoquent concaténation?
- 12. ComputerInfo.TotalVirtualMemory n'est pas correct
- 13. Ruby on Rails empêche une erreur nulle lorsqu'il est supposé que l'enregistrement n'existe pas
- 14. Est-ce que close/fclose sur stdin est correct?
- 15. lucene plus grand que
- 16. ASP.NET MVC Ajax Form: Est-ce que enctype est correct? Pourquoi les fichiers ne sont-ils pas téléchargés?
- 17. est-ce correct? salage
- 18. Vérifiez si l'utilisateur n'est pas supposé être en partage
- 19. Pourquoi le motif Borg est-il meilleur que le motif Singleton en Python?
- 20. ThreadPool Meilleures pratiques, Correct
- 21. Jquery - Référence par ID - Supposé de retourner un tableau?
- 22. vitesse de codage python et plus propre
- 23. pourquoi ne pas utiliser plus de Grails?
- 24. Quel sera le plus performant et pourquoi?
- 25. Pourquoi TADOBlobField.Savetofile n'écrit que 8 octets
- 26. Python FTP Fichier le plus récent
- 27. WP sIFR> Le titre est gris, supposé être blanc!
- 28. iPhone: Texture plus grande que 64x64?
- 29. Pourquoi KeyboardInterrupt ne fonctionne pas en python?
- 30. Pourquoi VB a-t-il plus de mots-clés LINQ que C#?
pas une tonne. je suis sur osx et la page de manuel env est plutôt ambigu là-bas. –
@ S.Lott: Avez-vous * lu * récemment? Dans ma boîte Debian, c'est l'une des pages de manuel les plus inutiles que j'ai jamais vues, et cela dit quelque chose. (Voici toute la "Description": Mettez chaque NOM à VALEUR dans l'environnement et exécutez la COMMANDE Yup, cela l'effacera tout de suite.) – Telemachus
@Telemachus: Oui, je l'ai lu. C'est pourquoi j'ai trouvé l'entrée Wikipedia. –