以下哪项描述了from [...] import [...]
的行为?
请考虑以下脚本:
更改路径
sys.path.insert(0, 'E:\\demo_dir\\example_dir\\eg_dir\\test_dir\\')
from src import name
sys.path.pop(0)
更改Cwd
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
?
答案 0 :(得分:1)
仅sys.path
用于搜索要作为模块加载的文件; Python不会查看sys.path
之外的其他目录.¹仅当''
(空字符串)在路径²中时才会搜索当前工作目录,因此如果有src.py
在当前工作目录和路径中的另一个目录中,将要加载的那个目录中的第一个。
当您直接运行Python解释器时(包括运行''
时),您会发现sys.path
自动显示在python -m modulename
的前面。这是standard Python behaviour。但是,如果您直接运行脚本(例如,只用myscript
键入#!/usr/bin/env python
)而不是脚本的目录(例如/usr/bin
,如果您的shell找到并运行/usr/bin/myscript
})将被添加到路径的前面。 (脚本本身当然可以在路径运行时将更多项添加到路径的前面。)
¹实际上,这并非完全正确; import
首先在sys.meta_path
中查询查找程序。这些可以看起来任何他们喜欢的地方,甚至可能不会使用sys.path
²你也可以在路径中使用.
,./.
或各种类似的想法,虽然这样的狡猾只是在寻找麻烦。