web-dev-qa-db-fra.com

Python - ajoute PYTHONPATH lors de l'exécution du module en ligne de commande

Je veux courir:

python somescript.py somecommand

Mais lorsque je lance ceci, j'ai besoin de PYTHONPATH pour inclure un certain répertoire. Je ne peux pas simplement l'ajouter à mes variables d'environnement, car le répertoire dans lequel je veux ajouter des modifications en fonction du projet que j'exécute. Est-il possible de modifier PYTHONPATH lors de l'exécution d'un script? Remarque: je n'ai même pas de variable PYTHONPATH. Je n'ai donc pas à m'inquiéter de l'ajout ou du remplacement de cette variable lors de l'exécution de ce script.

69
orokusaki

Pour Mac/Linux;

PYTHONPATH=/foo/bar/baz python somescript.py somecommand

Pour Windows, configurez un wrapper pythonpath.bat;

@ECHO OFF
setlocal
set PYTHONPATH=%1
python %2 %3
endlocal

et appelez le fichier script pythonpath.bat comme;

pythonpath.bat /foo/bar/baz somescript.py somecommand
116
ismail
 import sys
 sys.path.append('your certain directory')

Fondamentalement, sys.path est une liste avec tous les chemins de recherche des modules Python. Il est initialisé par l'interprète. Le contenu de PYTHONPATH est automatiquement ajouté à la fin de cette liste.

44
Piotr Czapla

Si vous exécutez la commande à partir d'un shell compatible POSIX, comme bash, vous pouvez définir la variable d'environnement comme suit:

PYTHONPATH="/path/to" python somescript.py somecommand

Si tout est sur une seule ligne, la valeur de l'environnement PYTHONPATH s'applique uniquement à cette commande.

$ echo $PYTHONPATH

$ python -c 'import sys;print("/tmp/pydir" in sys.path)'
False
$ PYTHONPATH=/tmp/pydir python -c 'import sys;print("/tmp/pydir" in sys.path)'
True
$ echo $PYTHONPATH
7
Ned Deily

Comme ce billet est vraiment vieux et que je ne sais pas ce qui a changé au fil du temps, j'aimerais ajouter quelque chose qui ne semble pas être suggéré.

Tout d'abord, pour rendre un script exécutable sans l'indicateur python, vous devez ajouter la ligne Shebang au début du script.

#!/usr/bin/python

# rest of your code...

Avec la simple ligne ci-dessus, vous spécifiez le chemin d'accès de l'interpréteur python que vous souhaitez utiliser. Ceci est très utile si vous avez plusieurs versions de Python installées.

Maintenant, votre script peut être exécuté comme suit:

<~/direcotry_of_script.py>$ ./script.py [options]

Si vous exécutez le script avec ./, vous risquez d'obtenir une erreur si vous ne disposez pas des autorisations d'exécution. Pour cela, vous pouvez utiliser Sudo chmod 744 <scriptname>, pour donner à l’espace-noms racine des autorisations d’exécution.

Maintenant pour la suggestion réelle! (pour Linux)

Vous pouvez simplement ajouter votre script au répertoire /usr/local/bin. Ensuite, ce script peut être exécuté n'importe où dans le système de fichiers. Voir ci-dessous:

$ script.py [options]

Astuce: script.py peut être renommé simplement script et utilisé comme suit:

$ script [options]
1
P. Soutzikevich

Vous pouvez essayer ceci pour exécuter une fonction dans votre script

python -c "import sys; sys.path.append('/your/script/path'); import yourscript; yourscript.yourfunction()"
0
Marco Rossi