我希望可以动态控制sys.path的内容,防止搜索路径的混乱。
我在子函数的初期追加了搜索范围,又在子函数的结尾将搜索路径还原,但是发现并没有实现我想要的结果。
文件夹结构
def_3_main.py的内容def def_3_test2_good():
def def_3_test2_good():
import os
import sys
import copy
# 保存原始的sys.path
original_sys_path = copy.deepcopy(list(sys.path))
script_dir = os.path.dirname(os.path.abspath(__file__))
print("当前脚本所在位置:", script_dir)
print("当前搜索路径:")
print("\n".join(sys.path))
sys.path.append(script_dir+"//..//def_2")
print("追加搜索路径后:")
print("\n".join(sys.path))
from print_test import print_test
print_test()
# 恢复原始的sys.path
sys.path = original_sys_path
print("还原搜索路径后:")
print("\n".join(sys.path))
def def_3_test3():
import os
import sys
script_dir = os.path.dirname(os.path.abspath(__file__))
print("当前脚本所在位置:", script_dir)
print("当前搜索路径:")
print("\n".join(sys.path))
# sys.path.append(script_dir+"//..//def_1")
from print_test import print_test
print_test()
if __name__ == '__main__':
def_3_test2_good()
def_3_test3()
输出结果
当前脚本所在位置: f:\实验\test_def\def_3
当前搜索路径:
f:\实验\test_def\def_3
D:\Program Files (x86)\Python\Python39\python39.zip
D:\Program Files (x86)\Python\Python39\DLLs
D:\Program Files (x86)\Python\Python39\lib
D:\Program Files (x86)\Python\Python39
C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages
D:\Program Files (x86)\Python\Python39\lib\site-packages
追加搜索路径后:
f:\实验\test_def\def_3
D:\Program Files (x86)\Python\Python39\python39.zip
D:\Program Files (x86)\Python\Python39\DLLs
D:\Program Files (x86)\Python\Python39\lib
D:\Program Files (x86)\Python\Python39
C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages
D:\Program Files (x86)\Python\Python39\lib\site-packages
f:\实验\test_def\def_3//..//def_2
def_2
还原搜索路径后:
f:\实验\test_def\def_3
D:\Program Files (x86)\Python\Python39\python39.zip
D:\Program Files (x86)\Python\Python39\DLLs
D:\Program Files (x86)\Python\Python39\lib
D:\Program Files (x86)\Python\Python39
C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages
D:\Program Files (x86)\Python\Python39\lib\site-packages
当前脚本所在位置: f:\实验\test_def\def_3
当前搜索路径:
f:\实验\test_def\def_3
D:\Program Files (x86)\Python\Python39\python39.zip
D:\Program Files (x86)\Python\Python39\DLLs
D:\Program Files (x86)\Python\Python39\lib
D:\Program Files (x86)\Python\Python39
C:\Users\Administrator\AppData\Roaming\Python\Python39\site-packages
D:\Program Files (x86)\Python\Python39\lib\site-packages
def_2
上面代码的运行应该出错的,但是子函数def_3_test3()依旧运行了,即搜索路径列表显示减少了,但是实际却没有减少。
询问是什么造成的?