我希望Python首先考虑导入包

时间:2013-09-04 08:59:47

标签: python import hierarchy

我可能只是与Python的思维方式不一致,但对我来说,当涉及到一个包(或任何项目文件夹系统)时,包的内容应总是更多比该软件包之外的任何重要,包括PYTHONPATH

以此层次结构为例:

somewhere/
    foo/
        __init__.py
    bar/
        __init__.py
        foo/
            __init__.py

如果somewhere位于PYTHONPATH,此处没有其他内容,而somewhere/bar/__init__.py我做了一个简单的import foo,我觉得bar应导入其中子路径somewhere/bar/foo,而不是路径变量中的陌生人somewhere/foo。如果你在自己的系统内找不到合适的东西,那么路径应该就在你的位置。

在我的测试中,似乎PYTHONPATH胜过直接后代,这将是一种耻辱,因为它是一个功能较弱,灵活性较低的系统,并且它不能正确地遵循层次结构的DAG性质。儿童先到先得,而不是兄弟姐妹,当然也不是祖先或完全无关系。但是,当我删除PYTHONPATH时,会突然使用foo内的bar

我只是做错了什么,或者Python真的以这种方式工作?有什么我可以做的让它按照我认为应该的方式工作吗?如果我删除somewhere/bar/foo然后它可以查看路径,但如果我明确地在foo中放置bar,那么它应该使用它,就像实例变量将覆盖类变量。

1 个答案:

答案 0 :(得分:0)

PEP 238是关于绝对和相关的进口。

据我了解,from . import bar会输入正确的内容。阅读PEP可以帮助您了解导入模块的不同方法。

他们指出,absolut导入是默认导入,因为它可以用于所有事情:

import foo
import bar.foo
import sys

与之相反:

import ..foo
import .foo
import sys #absolute