102

我想跑:

python somescript.py somecommand

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

4

6 回答 6

171

适用于 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
于 2011-01-02T19:38:46.463 回答
51
 import sys
 sys.path.append('your certain directory')

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

于 2011-01-02T19:41:25.317 回答
17

如果您从 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
于 2011-01-02T20:12:37.770 回答
2

你可以试试这个在你的脚本中执行一个函数

python -c "import sys; sys.path.append('/your/script/path'); import yourscript; yourscript.yourfunction()"
于 2017-09-03T09:52:31.167 回答
1

您可以将以下代码粘贴到__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])
于 2021-11-17T17:18:31.323 回答
-1

这适用于窗户:

例如,我的桌面上有一个名为“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)
于 2011-09-02T00:00:18.467 回答