Python如何从sys.path_importer_cache中删除路径无效的名称空间导入

问题描述

我有一个奇怪的现象(Windows,python 3.8.5):我有一个文件夹:c:\myfolder。该文件夹以某种方式进入sys.path_importer_cache,现在c:\ myfolder中的每个子文件夹都可以作为名称空间包导入。 因此,例如,存在以下子文件夹:c:\myfolder\foo\ 如果我尝试导入foo,我会得到:

import foo
foo
<module 'foo' (namespace)>
foo.__path__
_NamespacePath(['c:\\myfolder\\foo'])

,其加载程序是NamespaceLoader

问题在于,foo本身是一个程序包,已安装到站点程序包中,现在却无法从那里导入,因为这个奇怪的名称空间程序包胜过了它。

我搞砸了什么?我在哪里看?我只能找到这个提示c:\myfoldersys.path_importer_cache中。 但是为什么到达那里呢?如何删除? (我尝试过importlib.invalidate_caches(),没有成功...) 还有一个提示:如果我以隔离模式(python -I来运行python,这个问题就消失了。但是,据我所知,我的用户站点中没有任何可能导致它的内容

有什么想法吗?谢谢!

解决方法

已经弄清楚了...我在Anaconda中使用python,并且已经在c:\ myfolder中将Anaconda Prompt(带有condabin / activate)启动为开始文件夹。这就是为什么它进入path_importer_cache的原因...如果仅在c:中启动它,问题就消失了。