我可能只是在这里与 Python 的思维方式不一致,但对我来说,当涉及到包(或任何项目文件夹系统)时,包的内容应该总是比包之外的任何东西更重要,包括PYTHONPATH
.
以这个层次结构为例:
somewhere/
foo/
__init__.py
bar/
__init__.py
foo/
__init__.py
如果somewhere
是 in PYTHONPATH
,而这里没有其他内容,并且在somewhere/bar/__init__.py
我做一个简单的import foo
,我觉得应该从路径变量中bar
导入它的孩子,somewhere/bar/foo
而不是一个完全陌生的人。somewhere/foo
如果您在自己的系统中找不到正确的东西,路径应该是您要去的地方。
然而,在我的测试中,它似乎PYTHONPATH
胜过直系后代,这将是一种耻辱,因为它是一个不那么强大、不那么灵活的系统,并且它没有正确地尊重层次结构的 DAG 特性。孩子排在第一位,不是兄弟姐妹,当然也不是祖先或完整的非亲属。但是,当我删除时PYTHONPATH
,它突然使用了foo
里面bar
。
我只是做错了什么,还是 Python 真的以这种方式工作?我能做些什么让它按照我认为的方式工作吗?如果我删除somewhere/bar/foo
,那么它可以在路径中查找,但如果我明确地将 a foo
in bar
,那么它应该使用它,就像实例变量将覆盖类变量一样。