gpt4 book ai didi

python - import 是否在路径之前先查找当前工作目录?或者cwd的路径?

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:39 24 4
gpt4 key购买 nike

以下哪项描述了 from [...] import [...] 的行为?

  • cwd first:首先查看工作目录,然后查看路径
  • 路径优先:先查看路径,然后查看工作目录

考虑以下脚本:

更改路径

sys.path.insert(0, 'E:\\demo_dir\\example_dir\\eg_dir\\test_dir\\')
from src import name
sys.path.pop(0)

更改队列

old_cwd = os.getcwd()
os.chdir('E:\\demo_dir\\example_dir\\eg_dir\\test_dir\\')
from src import name
os.chdir(old_cwd)

组合脚本

old_cwd = os.getcwd(); os.chdir('E:\\demo_dir\\example_dir\\eg_dir\\test_dir\\')
sys.path.insert(0, 'E:\\demo_dir\\example_dir\\eg_dir\\test_dir\\')

from src import name

os.chdir(old_cwd)
sys.path.pop(0)

假设 sys.path 和 cwd 中都有名为 src 的内容,并且系统路径中的src与cwd中的src不同

我们刚刚从 sys.path 导入了 src 吗?或者来自cwd的src

最佳答案

仅使用sys.path来搜索要作为模块加载的文件; Python 不会查看 sys.path 之外的其他目录。1 仅当 '' (空字符串)位于路径²中时才会搜索当前工作目录,因此如果当前工作目录和路径中的另一个目录中都有 src.py,则将加载路径中第一个目录中的那个。

直接运行Python解释器时(包括运行python -m模块名)。这是standard Python behaviour 。但是,如果您直接运行脚本(例如,仅键入以 #!/usr/bin/env python 开头的 myscript),而不是该脚本的目录(例如 /usr/bin(如果您的 shell 找到并运行了/usr/bin/myscript)将被添加到路径的前面。 (脚本本身当然可以在运行时将更多项目添加到路径的前面。)

<小时/>

1 事实上,这并不完全正确; import 首先查询 sys.meta_path 中的查找器。这些可以查看任何他们喜欢的地方,甚至可能不使用 sys.path
² 您还可以在路径中使用 ../. 或各种类似的想法,尽管像这样变得棘手只是自找麻烦。

关于python - import 是否在路径之前先查找当前工作目录?或者cwd的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49418555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com