Disons que nous avons un script Python Si nous renommerons le fichier de sur Windows, si nous conservons l'extension de fichier d'origine, nous pourrons appeler le script sans le nom complet, car le programme d'installation Python enregistre l'extension Il semble que nous ayons besoin de livrer le même script sous deux noms différents afin d'appeler les environnements Windows et non Windows. Je n'aime vraiment pas ça et je cherche une solution sans cette redondance. P>
Une autre approche commune sur ceci consiste à ajouter un fichier Si nous sommes sur le point d'utiliser une wrapper, nous devons être sûrs que: P>
Je suppose que la solution optimale est toujours d'utiliser une enveloppe. Le lot ne fonctionnera pas, l'exécutable indigène ajoutait beaucoup de complexité, donc probablement un wrapper écrivant dans Python lui-même ferait. P> do.py code> et nous voulons pouvoir l'appeler sans extension, comme
faire code> ou
./. / code>. p>
do.py code> à
faire code> et assurez-vous que nous avons une ligne Shebang valide, il fonctionnera pour toutes les plateformes mais Windows. Sous Windows, il n'y a aucun moyen d'exécuter un fichier sans extension. P>
.py code> comme exécutable. P >
do.cmd code> wrapper appelant le fichier d'origine
do.py code>. Cela a au moins un problème majeur: il fait
cmd.exe code> de vous inviter avec Terminez le travail de lots? (Y / N) strong> message. p>
6 Réponses :
Vous pouvez toujours appeler votre script avec l'interprète Python. Vous obtenez la même cohérence dans * NIX, lorsque vous utilisez l'interprète.
windows p> * nix p>
Ce n'est pas ce qu'il veut. Il veut l'exécuter comme tout autre exécutable dans le système - sans spécifier quoi que ce soit, mais le nom de l'exécutable (script) dans la ligne de commande.
Vous pouvez utiliser des distutilles pour installer des scripts dans l'installation Python (l'outil Easy_install est installé comme celui-ci, par exemple). P>
Pour Windows, vous pouvez utiliser PY2EXE pour créer un script pouvant être exécuté sans extension de fichier . Sur Linux, vous pouvez simplement utiliser un fichier sans extension, mais y compris une ligne de shebang. P>
Si vous installez le script, vous pouvez l'exécuter avec Python -M Modulename code>. C'est également une plate-forme inter-plate-forme.
Jusqu'à présent, je suis venu avec cette solution qui semble fonctionner. Créez un fichier YourName.py code> avec ce contenu:
sur Windows J'ai ajouté l'extension ".py" à la variable d'environnement "pathext 'et qui fonctionne pour moi - si le fichier .PY est stocké dans un répertoire faisant partie de la variable d'environnement" PATH' ".
C:\>echo %PATHEXT% .COM;.EXE;.BAT;.CMD;.PY;.JS;.JSE
Cela a fonctionné pour moi dans les coquillages de commandement mais pour l'invite d'exécution, je devais ajouter une touche "Python_Script.exe" au registre - HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ App cheminées \ Puis défini la valeur par défaut sur mon python_script .Py Path, puis j'ai pu simplement taper "python_script" dans l'invite de course.
Mais comment cela fonctionne-t-il aussi sur les non-fenêtres? Puis-je taper faire code> sans l'extension?
Écrivez votre module Python principal avec un sur UNIX, écrivez un deuxième programme Python qui importe simplement le premier, en utilisant la syntaxe de She-Bang. Aucune extension sur ce fichier - c'est un script shell. Comme ceci: p> Ceci aura l'effet d'importer seulement Lorsque vous importez un module, le code dans le module est exécuté une fois. p> Ça ne Enlevez complètement la redondance, mais il est proche. Et c'est probablement la meilleure solution possible pour les scripts multiples-plate-forme. P> p> .py code> extension. Configurer
pathext code> correctement, et il fonctionnera sous Windows sans avoir à taper l'extension.
do.py code>. P>
faire code> doit être marqué comme exécutable pour UNIX.
do.py code> est un module dans cet environnement. p>
C'est une solution symétrique à celle donnée par OP mais c'est plus simple, semble donc être meilleure.
La réponse de Jason est plus simple et plus simple, mais une version générique obtient le nom du module du nom de fichier:
#!/usr/bin/env python import do
Peut-être la réponse réside dans la question "Pourquoi vous voulez pouvoir l'appeler sans extension"?
Wow, quels sont beaucoup de travail pour aucun bénéfice réel. Quel est le problème avec do.py? C'est une plate-forme parfaitement transversale sans travail du tout.
Pour ceux qui se demandent: sans extension signifie que nous masquons les détails de la mise en œuvre: Par exemple, si l'année prochaine, je souhaite remplacer le script Python actuel avec un script Ruby, je ne veux pas être nécessaire de modifier tous les appels vers le script. Un autre argument moins important: moins à écrire de la ligne de commande.
sous Windows, si nous conservons l'extension de fichier d'origine, nous pourrons appeler le script sans le nom complet, car le programme d'installation Python enregistre l'extension
.py code> comme exécutable one i> Pas vrai. L'enregistrement de l'extension ne permet pas d'appeler le script sans donner l'extension. Pour cela, vous devez également ajouter l'extension à la variable d'environnement code> Pathext CODE> AS ROMA suggérée.