web-dev-qa-db-fra.com

Comment exécuter des scripts Python sous Windows?

J'ai un script simple blah.py (utilisant Python 2):

import sys
print sys.argv[1]

Si j'exécute mon script par:

python c:/..../blah.py argument

Cela affiche un argument mais si j'exécute le script par:

blah.py argument

erreur se produit:

IndexError ...

Donc, les arguments ne passent pas au script.

python.exe dans PATH. Dossier avec blah.py également dans PATH.
python.exe est le programme par défaut pour exécuter les fichiers * .py.

Quel est le problème?

88
ton4eg

Lorsque vous exécutez un script sans taper "python" devant vous, vous devez connaître deux informations sur la façon dont Windows appelle le programme. La première consiste à déterminer le type de fichier que Windows considère comme étant: 

 C: \> assoc .py 
 .py = Python.File 

Ensuite, vous devez savoir comment Windows exécute les choses avec cette extension. Elle est associée au type de fichier "Python.File", cette commande montre donc ce qu'elle va faire:

 C: \> ftype Python.File 
 Python.File = "c:\python26\python.exe" "% 1"% * 

Ainsi, sur ma machine, lorsque je tape "blah.py foo", il exécute cette commande exacte, sans différence de résultat que si j'avais tapé le texte complet moi-même:

 "c:\python26\python.exe" "blah.py" foo 

Si vous tapez la même chose, y compris les guillemets, vous obtiendrez des résultats identiques à ceux obtenus lorsque vous tapez simplement "blah.py foo". Vous êtes maintenant en mesure de résoudre vous-même le reste de votre problème. 

(Ou postez des informations plus utiles dans votre question, telles que des copies copier-coller de ce que vous voyez dans la console. Notez que les personnes de ce type font voter leurs questions, et obtiennent des points de réputation et davantage de personnes. sont susceptibles de les aider avec de bonnes réponses.)

Apporté De Commentaires:

Même si assoc et ftype affichent les informations correctes, il peut arriver que les arguments soient supprimés. Dans ce cas, il peut être utile de réparer directement les clés de registre pertinentes pour Python. Met le 

HKEY_CLASSES_ROOT\Applications\python26.exe\Shell\open\command

la clé de: 

"C:\Python26\python26.exe" "%1" %*

Probablement, auparavant, %* était manquant. De même, définir 

 HKEY_CLASSES_ROOT\py_auto_file\Shell\open\command

à la même valeur. Voir http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/

 example registry setting for python.exe HKEY_CLASSES_ROOT\Applications\python.exe\Shell\open\command Le chemin du registre peut varier, utilisez python26.exe ou python.exe ou celui qui se trouve déjà dans le registre.

 enter image description here HKEY_CLASSES_ROOT\py_auto_file\Shell\open\command

137
Peter Hansen

vous devez définir l’application par défaut de gestion des fichiers python python.exe.

faites un clic droit sur un fichier * .py, sélectionnez la boîte de dialogue "Ouvrir avec". Dans celui-ci, sélectionnez "python.exe" et cochez l'option "Toujours utiliser ce programme pour ce type de fichier" (quelque chose comme ça).

alors vos fichiers python seront toujours exécutés en utilisant python.exe

22
santosc

En outre, si vous souhaitez pouvoir exécuter vos scripts python sans saisir le .py (ou le .pyw) à la fin du nom du fichier, vous devez ajouter .PY (ou .PY;.PYW) à la liste des extensions de la variable d'environnement PATHEXT.

Sous Windows 7:

clic droit sur Ordinateur
clic gauche Propriétés
clic gauche Paramètres système avancés
clic gauche sur l'onglet Avancé
clic gauche Variables d'environnement ...
sous "variables système", faites défiler jusqu'à PATHEXT
clic gauche sur PATHEXT pour le surligner
clic gauche Modifier ...
Editez la "valeur de la variable" pour qu'elle contienne ;.PY (la touche End passera à la fin)
clic gauche OK
clic gauche OK
clic gauche OK

Remarque n ° 1: les fenêtres d'invite de commande ne verront pas le changement sans être fermé ni rouvert.

Remarque n ° 2: la différence entre les extensions .py et .pyw réside dans le fait que la première ouvre une invite de commande lorsqu'elle est exécutée et que la dernière ne le fait pas.

Sur mon ordinateur, j'ai ajouté ;.PY;.PYW en tant que dernière extension (priorité la plus basse). Les valeurs "avant" et "après" de PATHEXT étaient donc les suivantes:

avant: .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

après .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW

Voici quelques commandes instructives:

C:\>echo %pathext%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW

C:\>assoc .py
.py=Python.File

C:\>ftype Python.File
Python.File="C:\Python32\python.exe" "%1" %*

C:\>assoc .pyw
.pyw=Python.NoConFile

C:\>ftype Python.NoConFile
Python.NoConFile="C:\Python32\pythonw.exe" "%1" %*

C:\>type c:\windows\helloworld.py
print("Hello, world!")  # always use a comma for direct address

C:\>helloworld
Hello, world!

C:\>
15
Dave Burton

J'ai rencontré le même problème mais dans le contexte de la nécessité de conditionner mon code pour les utilisateurs Windows (provenant de Linux) . Mon package contient un certain nombre de scripts avec des options de ligne de commande.

J'ai besoin que ces scripts soient installés à l'emplacement approprié sur les ordinateurs des utilisateurs Windows afin qu'ils puissent les appeler à partir de la ligne de commande . Comme le paquet est supposé être convivial, demandez à mes utilisateurs de modifier leur registre pour exécuter ces scripts. serait impossible.

Je suis tombé sur une solution que les employés de Continuum utilisent pour les scripts Python fournis avec leur paquet Anaconda: consultez votre répertoire Anaconda/Scripts pour obtenir des exemples.

Pour un script Python test, créez deux fichiers: un test.bat et un test-script.py.

test.bat se présente comme suit (les fichiers .bat dans Anaconda\Scripts appellent python.exe avec un chemin relatif que j’ai adapté pour mes besoins):

@echo off
set PYFILE=%~f0
set PYFILE=%PYFILE:~0,-4%-script.py
"python.exe" "%PYFILE%" %*

test-script.py est votre script Python actuel:

import sys
print sys.argv

Si vous laissez ces deux fichiers dans votre répertoire local, vous pouvez appeler votre script Python via le fichier .bat en effectuant

test.bat hello world
['C:\\...\\test-scripy.py', 'hello', 'world']

Si vous copiez les deux fichiers dans un emplacement figurant sur votre PATH (telle que Anaconda\Scripts), vous pouvez même appeler votre script en omettant le suffixe .bat.

test hello world
['C:\\...Anaconda\\Scripts\\test-scripy.py', 'hello', 'world']

Disclaimer: Je n'ai aucune idée de ce qui se passe et de la façon dont cela fonctionne. J'apprécierais donc toute explication.

4
user2042696

Comment exécuter des scripts Python sous Windows?

Vous pouvez installer pylauncher . Il est utilisé pour lancer les fichiers .py, .pyw, .pyc, .pyo et prend en charge plusieurs installations Python:

T\:> blah.py argument

Vous pouvez exécuter votre script Python sans spécifier l'extension .py si vous avez les variables .py, .pyw dans la variable d'environnement PATHEXT:

T:\> blah argument

Il ajoute un support pour Shebang (ligne d'en-tête #!) pour sélectionner la version Python souhaitée sous Windows si plusieurs versions sont installées. Vous pouvez utiliser la syntaxe * nix-compatible #! /usr/bin/env python.

Vous pouvez spécifier explicitement la version, par exemple pour l'exécuter à l'aide de la dernière version de Python 3 installée:

T:\> py -3 blah.py argument

Il devrait également corriger votre problème sys.argv en tant qu'effet secondaire.

4
jfs

Sur Windows

Pour exécuter un module python sans taper "python" ,

-> Faites un clic droit sur n’importe quel fichier python (*. Py)

-> Définir la propriété open with sur "python.exe" 

-> Cochez la case "Toujours utiliser ce programme pour ce type de fichier"

-> Ajoutez le chemin de python.exe à un environnement variable, par exemple. Ajouter C:\Python27 à la variable d’environnement PATH.

To Exécute un module python sans saisir l'extension ".py"

-> Editez la variable système PATHEXT et ajoutez l’extension ".PY" à la liste.

2
Ashfaq Memon

Vous avez trouvé une réponse incroyablement utile ici : Comment exécuter différentes versions de python dans cmd?

Je suggérerais d'utiliser l'utilitaire Python Launcher for Windows introduit dans Python 3.3 il y a quelque temps. Vous pouvez également le télécharger manuellement et l’installer directement à partir du site Web de l’auteur pour l’utiliser avec les versions antérieures de Python 2 et 3.

Quelle que soit la manière dont vous l'obtenez, il se sera associé après l'installation à toutes les extensions de fichier Python standard (fichiers .py, .pyw, .pyc et .pyo). Vous pourrez non seulement contrôler explicitement la version utilisée à l'invite de commande, mais également script par script en ajoutant des commentaires Linux/Unix-y Shebang #!/Usr/bin/env à la début de vos scripts Python.

Comme le suggère J.F. Sebastian, Python Launcher pour Windows est le meilleur choix par défaut pour lancer une version différente de Python dans Windows. Il s'agissait d'un outil tiers, mais il est maintenant officiellement pris en charge depuis Python 3.3.

Nouveau dans la version 3.3.

Le lanceur Python pour Windows est un utilitaire qui facilite la localisation et l'exécution de différentes versions de Python. Il permet aux scripts (ou à la ligne de commande) d'indiquer une préférence pour une version spécifique de Python, et localisera et exécutera cette version.

C'est un excellent outil, utilisez-le!

1
laike9m

Si c'est ce que j'ai compris, c'est comme ça:

C:\Users\(username)\AppData\Local\Programs\Python\Python(version)

COPY (pas supprimer) python.exe et renommer en py.exe et exécuter:

py filename.py
0
Lucas Paz

Pouvez-vous exécuter python.exe à partir de n’importe quelle carte? Si vous ne le faites pas, vérifiez si vous avez les valeurs appropriées pour python.exe dans l’environnement PATH.

Êtes-vous dans le même répertoire que blah.py. Vérifiez ceci en lançant la commande -> edit blah.py et vérifiez si vous pouvez ouvrir ce fichier

MODIFIER:

Dans ce cas, vous ne pouvez pas. (python arg signifie que vous appelez python.exe avec certains paramètres supposés par python comme étant le nom de fichier du script que vous voulez exécuter)

Vous pouvez créer bat fichier whit lignes dans votre chemin et exécuter le fichier .bat

Exemple:
Dans l’une des cartes de chemins, créez blah.py.bat Modifiez le fichier et mettez la ligne.

python C:\Somedir\blah.py

Vous pouvez maintenant lancer blah.py depuis n’importe quel endroit, car vous n’avez pas besoin de mettre une extension .bat lorsque vous exécutez des fichiers bat.

0
Luka Rahne

Il suffit de lancer la commande:

C:>python .\file_name.py

En supposant que le nom du fichier se trouve dans le même dossier et que Python a déjà été ajouté aux variables d'environnement.

0
Mwizak