我想跑:
python somescript.py somecommand
但是,当我运行它时,我需要PYTHONPATH
包含某个目录。我不能只将它添加到我的环境变量中,因为我想要添加的目录会根据我正在运行的项目进行更改。有没有办法PYTHONPATH
在运行脚本时进行更改?注意:我什至没有PYTHONPATH
变量,所以我不需要担心在运行此脚本期间附加到它而不是覆盖它。
我想跑:
python somescript.py somecommand
但是,当我运行它时,我需要PYTHONPATH
包含某个目录。我不能只将它添加到我的环境变量中,因为我想要添加的目录会根据我正在运行的项目进行更改。有没有办法PYTHONPATH
在运行脚本时进行更改?注意:我什至没有PYTHONPATH
变量,所以我不需要担心在运行此脚本期间附加到它而不是覆盖它。
适用于 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
import sys
sys.path.append('your certain directory')
基本上 sys.path 是一个包含所有 python 模块搜索路径的列表。它由解释器初始化。PYTHONPATH 的内容会自动添加到该列表的末尾。
如果您从 POSIX 兼容的 shell 运行命令,例如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.append('/your/script/path'); import yourscript; yourscript.yourfunction()"
您可以将以下代码粘贴到__init__.py
要从中导入的包中:
import sys
from pathlib import Path
sys.path.insert(0, Path(__file__).parent)
然后,您可以像往常一样从该包中导入模块。
import <module_name>
<module_name>.<method_on_module>()
Example:
import algorithms
algorithms.run_algo1()
您的 IDE 可能会在模块名称下划线,但是当您运行 Python 解释程序时,这不会成为问题。
此外,如果您需要稍后读取路径,您可以执行以下操作:
DIR_PATH = Path(sys.path[0])
这适用于窗户:
例如,我的桌面上有一个名为“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)