Python - 在命令行模块运行期间添加PYTHONPATH

oro*_*aki 81 python pythonpath

我想跑:

python somescript.py somecommand
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,我需要PYTHONPATH包含一个特定的目录.我不能只将它添加到我的环境变量中,因为我想要添加的目录会根据我正在运行的项目而更改.有没有办法PYTHONPATH在运行脚本时改变?注意:我甚至没有PYTHONPATH变量,因此在运行此脚本期间,我不需要担心附加到它而是覆盖它.

ism*_*ail 138

对于Mac/Linux;

PYTHONPATH=/foo/bar/baz python somescript.py somecommand
Run Code Online (Sandbox Code Playgroud)

对于Windows,设置包装器pythonpath.bat;

@ECHO OFF
setlocal
set PYTHONPATH=%1
python %2 %3
endlocal
Run Code Online (Sandbox Code Playgroud)

并调用pythonpath.bat脚本文件;

pythonpath.bat /foo/bar/baz somescript.py somecommand
Run Code Online (Sandbox Code Playgroud)

  • 在Windows上,如果你想*追加*现有`PYTHONPATH`的路径,你可能想要使用`set PYTHONPATH =%PYTHONPATH%;%1`. (4认同)

Pio*_*pla 48

 import sys
 sys.path.append('your certain directory')
Run Code Online (Sandbox Code Playgroud)

基本上sys.path是一个包含python模块的所有搜索路径的列表.它由解释器初始化.PYTHONPATH的内容会自动添加到该列表的末尾.

  • 或者sys.path.insert(0,'/ some/directory')将它放在路径的前面.这允许您的材质覆盖可能已经在pythonpath上的其他内容. (8认同)

Ned*_*ily 8

如果从符合POSIX的shell运行命令bash,则可以像这样设置环境变量:

PYTHONPATH="/path/to" python somescript.py somecommand
Run Code Online (Sandbox Code Playgroud)

如果它全部在一行上,则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
Run Code Online (Sandbox Code Playgroud)