Existe-t-il un moyen portable d'exécuter un script Python à partir d'un shell sans écrire son chemin complet?Comment faire pour exécuter un script Python sans spécifier son chemin d'accès complet
Par exemple sous Linux, je voudrais alors que dans mon répertoire
cd ~
pour être en mesure d'exécuter un script python appelé run.py qui est en dire, ~/long/chemin/vers/run py, mais je veux le lancer en tapant simplement
python run.py
au lieu de
python ~/long/path/to/run.py
J'espérer une sorte de soi liste de chemins d'accès à l'arc qui contient plusieurs répertoires, tout comme la variable PATH, de sorte que python run.py exécute le premier run.py qu'il rencontre dans l'un des répertoires.
J'ai envisagé de transformer run.py en un exécutable et d'ajouter son répertoire à la variable PATH du système, mais je n'ai pas trouvé de manière portable de rendre un script python exécutable.
EDIT
Un an plus tard, après avoir demandé, je suis un peu moins noob, et je vois que ma question n'a pas été très claire et n'a pas beaucoup de sens, donc après une question que je vais upvote clarifier certaines choses.
1) Portable.
Lorsque j'ai demandé cela, j'ai dit portable. Cependant, les moyens portables ne sont pas clairs dans ce cas, et je n'y ai pas beaucoup insisté.
les plates-formes: devrait fonctionner sur POSIX (Linux, MacOS, etc.) et Windows
cela ne fonctionne toujours pas beaucoup de sens car Windows utilise
cmd.exe
, et utilise POSIXsh
, pour que chacun pourrait exécutez les commandes avec une syntaxe différente. Alors disons que la chose la plus portable possible serait de nourrir la même entrée à la foissh
etcmd.exe
, exécutant le script python dans les deux cas. Dans ce cas, vous pouvez exécuter la même commande à partir d'une fonction ANSI Csystem
, qui utilisesh
sur POSIX etcmd
sous Windows. ANSI C étant l'une des rares choses communes à Windows et POSIX, la question a du sens dans ce cas.
2) Executable
Ensuite, l'expression turning run.py into an executable
, n'est pas très clair. Par ce que je parlais de la stratégie Linux de chmod +x run.py
, ajouter un shebang #!/usr/bin/env python
, et en ajoutant son répertoire le système ajouter ~/long/chemin/à/la variable d'environnement PATH. Mais cela ne fonctionnera pas pour Windows car Windows ne supporte pas une propriété de métadonnées de fichier exécutable comme Linux et parce que/usr/bin/env n'existe pas forcément dans Windows.
3) Extension
Enfin, dans ma tête, j'espérait une solution qui ne précise pas quel type de fichier exécuter est, de sorte que si un jour nous décidons de le faire, par exemple, un fichier perl, pas les interfaces changeraient.
Par conséquent, écrire run.py
serait mauvais car il spécifierait le type de fichier; il serait préférable de pouvoir écrire juste run
Merci FJ, c'est exactement ce que je cherchais, je le sens a deux avantages sur le '#!' approche: 2 –
(spécifique Désolé, commentaire à moitié terminé) ... Merci F.J, c'est ce que je cherchais, je pense qu'il a deux avantages sur le '#!' approche: 1) pas encombrer les scripts 2) pas encombrer la variable globale PATH, et en utilisant le plus spécifique PYTHONPATH à la place. L'inconvénient est bien sûr d'avoir à taper "python -m" tout le temps, ce qui prend de l'espace et pire, pourrait signifier de réécrire du code si jamais vous décidez un jour de transformer vos scripts python en scripts, par exemple. –
J'ai essayé python -m run mais ça n'a pas fonctionné ... Je suis sûr que run.py est dans le PYTHONPATH puisque je peux l'importer et ça se voit quand j'importe le sys; print sys.path ... ai-je oublié quelque chose? –