我要跑步:
python somescript.py somecommand
但是,当我运行它时,我需要PYTHONPATH
包括一个目录。我不能仅将其添加到我的环境变量中,因为我要添加的目录会根据我正在运行的项目进行更改。PYTHONPATH
运行脚本时有没有办法改变?注意:我什至没有PYTHONPATH
变量,因此我不必担心在运行此脚本期间将其追加或覆盖它。
Answers:
对于Mac / Linux;
PYTHONPATH=/foo/bar/baz python somescript.py somecommand
对于Windows,设置包装器pythonpath.bat
;
@ECHO OFF
setlocal
set PYTHONPATH=%1
python %2 %3
endlocal
并pythonpath.bat
像这样调用脚本文件;
pythonpath.bat /foo/bar/baz somescript.py somecommand
PYTHONPATH=/foo/bar python somescript.py somecommand
python -c"import sys;sys.path.append('/my/dir')"
,然后尝试python myscript.py mycommand
,但是显然它与第一个解释器会话之间没有共享路径。啊,刚刚看到您的下一条评论,现在尝试...在WinXP上不起作用。
unset
Windows上没有环境变量命令。而是setlocal
在初始值之后添加a echo off
,然后endlocal
当.bat脚本结束时将隐式发生(PYTHONPATH
并将其恢复为先前的值)。
PYTHONPATH
,则可能要使用set PYTHONPATH=%PYTHONPATH%;%1
。
import sys
sys.path.append('your certain directory')
基本上sys.path是一个包含python模块所有搜索路径的列表。它由解释器初始化。PYTHONPATH的内容会自动添加到该列表的末尾。
sys.path.append(r'D:\PyCharmProjects\cheese_shoppe')
Windows中的示例。
如果您是从POSIX兼容的外壳程序(如)运行命令bash
,则可以这样设置环境变量:
PYTHONPATH="/path/to" python somescript.py somecommand
如果全部在一行上,则PYTHONPATH环境值仅适用于该命令。
$ 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
python -c "import sys; sys.path.insert(0,'my/path'); import mymodule"
无法正常进行。
您可以尝试在脚本中执行函数
python -c "import sys; sys.path.append('/your/script/path'); import yourscript; yourscript.yourfunction()"
这是针对Windows的:
例如,我的桌面上有一个名为“ mygrapher”的文件夹。在内部,有一个名为“计算”和“图形”的文件夹,其中包含我的主文件“ grapherMain.py”所需的Python文件。另外,“ grapherMain.py”存储在“ graphing”中。要运行所有内容而不移动文件,我可以制作一个批处理脚本。我们将此批处理文件称为“ rungraph.bat”。
@ECHO OFF
setlocal
set PYTHONPATH=%cd%\grapher;%cd%\calculation
python %cd%\grapher\grapherMain.py
endlocal
该脚本位于“ mygrapher”中。要运行,我将进入命令提示符,然后执行以下操作:
>cd Desktop\mygrapher (this navigates into the "mygrapher" folder)
>rungraph.bat (this executes the batch file)