Lancez le script Python à partir de la ligne de commande Windows à l’aide du système PATH pour l’emplacement du fichier

Cela peut être plus une question Windows générale qu’une question Python, je ne suis pas sûr.

J’ai un dossier plein de fichiers python appelé GDAL (une bibliothèque géospatiale). L’emplacement de la bibliothèque GDAL est stocké dans le système Windows PATH, donc lorsque je tape ceci dans une fenêtre de commande Windows pour vérifier que PATH est configuré correctement:

gdal_retile.py 

J’obtiens l’ouverture du bloc-notes pour afficher le code, comme prévu, car c’est l’application par défaut pour les fichiers .py sur ce PC.

Si toutefois je fais ceci:

 python gdal_retile.py 

Ça ne marche pas, dit-on

Aucun fichier ou répertoire de ce nom

Pourtant, si je définis le chemin complet:

 python "C:\Program Files\GDAL\gdal_retile.py" 

Ça fonctionne bien. Ne peut-on pas utiliser PATH dans le cadre d’un argument de l’interpréteur Python?

TL: DR; Non.

PATH est utilisé pour rechercher le fichier (exécutable) que vous essayez d’exécuter. Si un fichier n’est pas exécutable (par exemple, des fichiers texte), Windows essaiera de trouver quel programme est enregistré pour gérer l’extension du fichier (dans votre bloc-notes) et de lui transmettre le chemin du fichier en argument.

Une fois que le programme correct a été trouvé, tous les arguments suivants sont d’abord vérifiés pour les éventuels espaces réservés %ENVIRONMENT_VARIABLE% à remplacer par les valeurs réelles, puis traités comme une liste de chaînes séparées par des espaces et transmis au démarrage du programme. C’est la tâche du programme, alors, de savoir quoi faire avec eux. PATH n’a pas de jeu dans la résolution des arguments.

Pourquoi est-ce le cas?

Les arguments à un programme peuvent être n’importe quoi. Imaginez que vous transmettez le nom de fichier d’un fichier que vous souhaitez créer dans le dossier actuel. Comment le système d’exploitation peut-il savoir que le nom de fichier que vous transmettez n’est pas réellement un fichier existant à rechercher dans PATH , mais un fichier qui sera créé par le programme? C’est pourquoi la responsabilité de gérer les arguments repose entièrement sur le programme en cours de démarrage.

Python ne considère pas le chemin du système dans ses arguments, pas même PYTHONPATH

Vous pouvez simuler cela en utilisant where trouver le script dans le chemin

 where gdal_retile.py > %TEMP%\fullp 

puis utilisez cela pour définir une variable

 set /PC=<%TEMP%\fullpath 

puis appeler python avec le chemin complet

 python "%C%" 

(il n'y a pas d'erreur à vérifier ici sur la commande where , qui ne peut rien ou plus de 1 chemin, donc cette solution est perfectible mais pratique pour lancer un autre interpréteur que celui associé à l'extension .py sous Windows)