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

86

Je veux courir:

python somescript.py somecommand

Mais, quand je lance cela, je dois PYTHONPATHinclure un certain répertoire. Je ne peux pas simplement l'ajouter à mes variables d'environnement parce que le répertoire dans lequel je souhaite ajouter des modifications en fonction du projet que j'exécute. Existe-t-il un moyen de modifier PYTHONPATHlors de l'exécution d'un script? Remarque: je n'ai même pas de PYTHONPATHvariable, donc je n'ai pas à m'inquiéter de l'ajouter ou de la remplacer pendant l'exécution de ce script.

orokusaki
la source

Réponses:

148

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 pythonpath.batfichier de script comme;

pythonpath.bat /foo/bar/baz somescript.py somecommand
ismail
la source
@ İsmail - merci. Cependant, comment puis-je faire cela tout en exécutant un script à partir de mon invite de commande? Je ne suis pas en train d'exécuter Python, d'importer des éléments et de les exécuter manuellement.
orokusaki le
Sur Mac / Linux, vous feriezPYTHONPATH=/foo/bar python somescript.py somecommand
ismail
J'ai essayé python -c"import sys;sys.path.append('/my/dir')"et ensuite python myscript.py mycommand, mais il ne partage évidemment pas le chemin de la première session d'interprétation avec la suivante. Ah, je viens de voir votre prochain commentaire, j'essaye maintenant ... Cela n'a pas fonctionné sur WinXP.
orokusaki
1
Il n'y a pas de unsetcommande de variable d'environnement sous Windows. Au lieu de cela, ajoutez un setlocalaprès l'initiale echo off, puis un implicite endlocalse produira lorsque le script .bat se terminera (et PYTHONPATHsera restauré à sa valeur précédente).
martineau
5
Sous Windows, si vous souhaitez ajouter un chemin d'accès à l'existant PYTHONPATH, vous pouvez utiliser set PYTHONPATH=%PYTHONPATH%;%1.
martineau
49
 import sys
 sys.path.append('your certain directory')

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

Piotr Czapla
la source
10
ou sys.path.insert (0, '/ some / directory') pour le placer au début de votre chemin. Cela permet à votre matériel de remplacer d'autres éléments qui se trouvent peut-être déjà sur pythonpath.
sienkiew le
J'ai utilisé cette réponse pour exécuter un test inintentionné en dehors de l'IDE pydev-eclipse.
LAL
sys.path.append(r'D:\PyCharmProjects\cheese_shoppe')exemple dans Windows.
Bob Stein
9

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

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

Si tout est sur une seule ligne, la valeur d'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
Ned Deily
la source
Juste ce que je cherchais, merci beaucoup. Pour une raison quelconque, courir python -c "import sys; sys.path.insert(0,'my/path'); import mymodule"ne fonctionnait pas.
Luke Davis
0

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()"
Marco Rossi
la source
-1

Ceci est pour Windows:

Par exemple, j'ai un dossier nommé "mygrapher" sur mon bureau. À l'intérieur, il y a des dossiers appelés "calcul" et "graphing" qui contiennent des fichiers Python dont mon fichier principal "grapherMain.py" a besoin. De plus, "grapherMain.py" est stocké dans "graphing". Pour tout exécuter sans déplacer de fichiers, je peux créer un script batch. Appelons ce fichier batch "rungraph.bat".

@ECHO OFF
setlocal
set PYTHONPATH=%cd%\grapher;%cd%\calculation
python %cd%\grapher\grapherMain.py
endlocal

Ce script se trouve dans "mygrapher". Pour exécuter les choses, j'entrerais dans mon invite de commande, puis ferais:

>cd Desktop\mygrapher (this navigates into the "mygrapher" folder)
>rungraph.bat (this executes the batch file)
Jack
la source
5
et en quoi est-ce différent de la réponse @ İsmail «cartman» Dönmez?
Alex Okrushko