从名称冲突包导入哪些结构不同?

2024-04-20 00:03:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包foo的布局如下:

.
└── foo
    ├── bar.py
    └── __init__.py

但是,在我的$PYTHONPATH中有另一个名为foo的包,如下所示:

.
└── foo
    ├── qux.py
    └── __init__.py

我真正关心的是从前者导入bar,从后者导入qux

在不解决冲突的情况下,有没有一种合理的干净方法来做到这一点?具体地说,利用尽管共享同一个名称,但包装具有不同的结构这一事实(具体来说,第一个包含嵌套的bar,第二个包含嵌套的qux

例如,如果有一种方法可以import foo并在列表中获取匹配的foo包,而不仅仅是$PYTHONPATH中的第一个包,那么我可以迭代它们并测试hasattr(package, 'bar')

回答这个问题是合理的,并且没有办法处理这样的名称冲突-即$PYTHONPATH中有多个包具有完全相同的名称


Tags: 方法pyimport名称利用fooinitbar