繁体   English   中英

通过解释器运行文件会更改当前目录吗?

[英]Running a file via the interpreter changes current directory?

当我尝试$> 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 中。

我依赖于./是(实际上)在 PYTHONPATH 上的事实。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM