我在这里可能与Python的思维方式不符,但对我而言,当涉及到一个程序包(或任何项目文件夹系统)时,该程序包的内容应始终比该程序包之外的任何内容(包括)都重要PYTHONPATH
。
以这个层次结构为例:
somewhere/
foo/
__init__.py
bar/
__init__.py
foo/
__init__.py
如果somewhere
is在中PYTHONPATH
,并且这里没有其他内容,并且在somewhere/bar/__init__.py
我做一个simple中import foo
,我认为bar
应该从path变量中导入其子项somewhere/bar/foo
(而不是完全陌生的人)somewhere/foo
。如果您无法在自己的系统中找到任何东西,则路径应该是您要去的地方。
但是,在我的测试中,似乎PYTHONPATH
比直接子孙更胜一筹,这真是太可惜了,因为它是一个功能较弱,灵活性较差的系统,并且不能正确地遵循DAG层次结构的性质。孩子是第一位的,不是兄弟姐妹,当然不是祖先或完整的非亲戚。但是,当我移开时PYTHONPATH
,它突然使用了foo
内部bar
。
我是在做错什么,还是Python真的以这种方式工作?我可以做些什么使它按我认为的方式工作?如果我删除了它somewhere/bar/foo
,那么它可以在路径中查找,但是如果我显式放置一个foo
in bar
,那么它应该使用它,就像实例变量将覆盖类变量一样。
PEP 238涉及绝对进口和相关进口。
据我了解,from . import bar
将导入正确的东西。阅读该PEP可以帮助您了解导入模块的不同方式。
他们指出,绝对进口是默认的,因为它可以用于所有事物:
import foo
import bar.foo
import sys
相对于:
import ..foo
import .foo
import sys #absolute
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句