You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移除sys.path中的模块路径后为何仍能重新导入该模块?

为什么移除sys.path路径后仍能导入已加载的同名模块?

这是因为Python的模块导入机制依赖全局模块缓存,具体原因如下:

Python在成功导入一个模块后,会把该模块的对象存入sys.modules字典中做缓存——只要当前Python解释器进程没有重启,这个缓存就会一直保留。

结合你的测试过程具体分析:

  • 当你第一次将/root加入sys.path并导入pttest模块后,Python已经把模块加载到内存,同时在sys.modules中注册了'pttest'对应的模块对象。
  • 后续你移除sys.path中的/root、删除局部的pttest变量,只是清理了路径列表和当前作用域的变量,但**sys.modules里的模块缓存完全没被改动**。
  • 再次执行from pttest import pttest时,Python会优先检查sys.modules,发现缓存中存在该模块,就直接从缓存读取内容,不会再去遍历sys.path查找新的模块文件。

如果需要重新导入不同路径下的同名模块,得先清除缓存:

import sys
# 移除模块缓存
if 'pttest' in sys.modules:
    del sys.modules['pttest']
# 修改sys.path为目标路径
sys.path.insert(0, "/新的模块路径")
# 重新导入
from pttest import pttest

内容的提问来源于stack exchange,提问作者user1159290

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 16:12:06