Python可以';当父目录位于sys.path中时,无法始终找到模块

Python可以';当父目录位于sys.path中时,无法始终找到模块,python,python-3.x,Python,Python 3.x,我目前正在从事一个项目,需要导入文件系统中任何地方的自制模块。但是python似乎无法始终如一地导入它们 所有模块都有相同的名称,这就是为什么我将它们与它们的父目录耦合,例如:xyz.abc用于名为abc.py的文件夹中名为xyz的模块。xyz的父目录已添加到路径。为了以后导入它们,我使用importlib.import\u模块(模块名称)其中模块名称为xyz.abc 为了测试我的代码,我使用python的临时文件库来创建临时目录和临时文件。(/tmp我的系统在重新启动时会被清理,而不是自动清理

我目前正在从事一个项目,需要导入文件系统中任何地方的自制模块。但是python似乎无法始终如一地导入它们

所有模块都有相同的名称,这就是为什么我将它们与它们的父目录耦合,例如:
xyz.abc
用于名为
abc.py
的文件夹中名为
xyz
的模块。xyz的父目录已添加到路径。为了以后导入它们,我使用
importlib.import\u模块(模块名称)
其中模块名称为
xyz.abc

为了测试我的代码,我使用python的临时文件库来创建临时目录和临时文件。(
/tmp
我的系统在重新启动时会被清理,而不是自动清理。)

我已经尝试添加了一个
\uuuu init\uuuuu.py
文件,它不会改变任何东西。 我还尝试了
os.sync()
强制将文件写入我的磁盘,认为这可能是一个种族问题,但没有帮助

以下是代码的中断处:

if parent not in sys.path:
    sys.path.insert(0, parent)
module_name = os.path.basename(dir_path) + "." + filename.split(".")[0]
return importlib.import_module(module_name)
目录的树结构是:

/tmp/tmp9tp_1j_q/
└── tmprvbxhk3t.py
当我在
模块名称=…
之前打印时,
sys.path
中有
'/tmp'

执行代码时,有时有效,有时无效。我得到:
ModuleNotFoundError:没有名为“tmpfjig62pf”的模块

我在想,插入后,
sys.path
可能不会直接在内部更新


我需要一些帮助来解决这个问题。

问题不在
sys.path
中,但很接近。 正是
sys.meta\u path
中的Finder对象使用
sys.path
sys.path\u钩子
查找模块,并且
sys.meta\u path
具有内部缓存,在这种情况下不会自动“刷新”

因此,要成功导入解释器开始执行后创建的模块,
sys.meta_path
的内部缓存应该无效

这可以通过在创建测试模块后调用
importlib.invalidate\u caches()
来实现