我希望Python首先检查要导入的软件包

加里·菲克斯勒

我在这里可能与Python的思维方式不符,但对我而言,当涉及到一个程序包(或任何项目文件夹系统)时,该程序包的内容应始终该程序包之外的任何内容(包括)都重要PYTHONPATH

以这个层次结构为例:

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

如果somewhereis在中PYTHONPATH,并且这里没有其他内容,并且在somewhere/bar/__init__.py我做一个simple中import foo,我认为bar应该从path变量中导入其子项somewhere/bar/foo(而不是完全陌生的人)somewhere/foo如果您无法在自己的系统中找到任何东西,则路径应该是您要去的地方。

但是,在我的测试中,似乎PYTHONPATH比直接子孙更胜一筹,这真是太可惜了,因为它是一个功能较弱,灵活性较差的系统,并且不能正确地遵循DAG层次结构的性质。孩子是第一位的,不是兄弟姐妹,当然不是祖先或完整的非亲戚。但是,当我移开时PYTHONPATH,它突然使用了foo内部bar

我是在做错什么,还是Python真的以这种方式工作?我可以做些什么使它按我认为的方式工作?如果我删除了somewhere/bar/foo那么它可以在路径中查找,但是如果我显式放置一个fooin bar,那么它应该使用它,就像实例变量将覆盖类变量一样。

托林克

PEP 238涉及绝对进口和相关进口。

据我了解,from . import bar将导入正确的东西。阅读该PEP可以帮助您了解导入模块的不同方式。

他们指出,绝对进口是默认的,因为它可以用于所有事物:

import foo
import bar.foo
import sys

相对于:

import ..foo
import .foo
import sys #absolute

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章