问题描述
我有一个奇怪的现象(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:\myfolder
在sys.path_importer_cache
中。
但是为什么到达那里呢?如何删除? (我尝试过importlib.invalidate_caches()
,没有成功...)
还有一个提示:如果我以隔离模式(python -I
来运行python,这个问题就消失了。但是,据我所知,我的用户站点中没有任何可能导致它的内容。
有什么想法吗?谢谢!
解决方法
已经弄清楚了...我在Anaconda中使用python,并且已经在c:\ myfolder中将Anaconda Prompt(带有condabin / activate)启动为开始文件夹。这就是为什么它进入path_importer_cache的原因...如果仅在c:中启动它,问题就消失了。