【问题标题】:Running a file via the interpreter changes current directory?通过解释器运行文件会更改当前目录?
【发布时间】:2020-03-01 21:06:01
【问题描述】:

当我尝试$> python ./tools/test.py 时,我收到一个导入错误,我无法导入我从中调用 python 的目录中存在的模块。不过,我可以导入这个模块,$> python -c "import mod" 可以。

我依赖于 ./ (实际上)在 PYTHONPATH 上这一事实。

当我在不同目录中的脚本上运行解释器时,python 对 python 路径做了什么?有没有办法“锁定”当前工作目录,以便我可以让导入工作?

我的设置:

./mod.py

x = 5     # just for demonstration purposes

./tools/test.py

from mod import x
# ... snip ... actual content

我正在从包含mod.pytools/ 的目录中调用python:

$> python -c "from mod import x"      # works fine
$> python tools/test.py

Traceback (most recent call last):

File "tools/test.py", line 1, in <module>
from mod import x
ModuleNotFoundError: No module named 'mod'

请注意,包含 mod.pytools 的当前目录在我的 PYTHONPATH 上不是

【问题讨论】:

    标签: python pythonpath


    【解决方案1】:

    我依赖于 ./ (实际上)在 PYTHONPATH 上这一事实。

    不是。它不在PYTHONPATH 上,也不在sys.path 上。当您按文件路径运行脚本时,脚本的 目录会被添加到sys.path。您可以查看在 Python command line docs 中指定要运行的程序的每种方式添加到 sys.path 的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      • 2014-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多