Python可以';当父目录位于sys.path中时,无法始终找到模块
我目前正在从事一个项目,需要导入文件系统中任何地方的自制模块。但是python似乎无法始终如一地导入它们 所有模块都有相同的名称,这就是为什么我将它们与它们的父目录耦合,例如: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我的系统在重新启动时会被清理,而不是自动清理
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()
来实现