Python 如何从 sys.path_importer_cache 中删除路径(无效的命名空间导入)
Python how to remove path from sys.path_importer_cache (invalid namespace import)
我有一个奇怪的现象(Windows,python3.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:\myfolder
在 sys.path_importer_cache
中。
但它为什么会到达那里?我怎样才能删除它? (我试了importlib.invalidate_caches()
,没有成功...)
还有一个提示:如果我 运行 python 处于隔离模式 (python -I
),这个问题就会消失。但是,我的用户站点中没有任何可能导致它的东西(据我所知。)
有什么想法吗?谢谢!
已经弄清楚了...我在 Anaconda 中 python,并且在 c:\myfolder 作为起始文件夹中启动了 Anaconda Prompt(condabin/activate)。这就是它进入 path_importer_cache 的原因...如果我只是在 c: 中启动它,问题就会消失。
我有一个奇怪的现象(Windows,python3.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:\myfolder
在 sys.path_importer_cache
中。
但它为什么会到达那里?我怎样才能删除它? (我试了importlib.invalidate_caches()
,没有成功...)
还有一个提示:如果我 运行 python 处于隔离模式 (python -I
),这个问题就会消失。但是,我的用户站点中没有任何可能导致它的东西(据我所知。)
有什么想法吗?谢谢!
已经弄清楚了...我在 Anaconda 中 python,并且在 c:\myfolder 作为起始文件夹中启动了 Anaconda Prompt(condabin/activate)。这就是它进入 path_importer_cache 的原因...如果我只是在 c: 中启动它,问题就会消失。