当有两个不同的位置,顶层目录为com时,如何加载python模块com.foo2.bar

How to load a python module com.foo2.bar when there are two different locations with top level directory as com

我在两个不同的地方有模块

例如

1
2
3
4
5
6
7
8
9
10
11
12
13
Location1
   |- com
       |-__init__.py
       |-foo1
          |-__init__.py
          |-bar1.py

Location2
   |- com
       |-__init__.py
       |-foo2
          |-__init__.py
          |-bar2.py

这两个位置按上述顺序排列在Python路径中。尝试导入com.foo2.bar2时,出现以下错误:

1
2
3
Traceback (most recent call last):
  File"", line 1, in
ImportError: No module named foo2

如果将顶级包名称更改为com2(即location2/com2/foo2/bar2.py),则import语句成功。

我想我做了一些不正确的事情,有人能帮忙吗?

谢谢。


您需要的是在python中称为名称空间包。使用标准库的一种方法是使用pkgutil;另一种方法是使用distribute或setuptools项目提供的第三方模块pkg_资源。

对名称空间包的支持将在带有PEP 382的标准库和解释器中得到改进。


似乎python导入机制不支持将单个包拆分为多个源树。

我们通过python的import hooks pep 302使用bootstrapping实现这一点:http://www.python.org/dev/pep s/pep-0302/