1

我在两个不同的位置有模块

例如

位置1
   |- com
       |-__init__.py
       |-foo1
          |-__init__.py
          |-bar1.py

位置2
   |- com
       |-__init__.py
       |-foo2
          |-__init__.py
          |-bar2.py

这两个位置按上述顺序位于 PYTHONPATH 中。当我尝试导入 com.foo2.bar2 时,出现以下错误:

回溯(最近一次通话最后):
  文件“”,第 1 行,在
ImportError:没有名为 foo2 的模块

如果我把顶层包名改成com2(即location2/com2/foo2/bar2.py),那么import语句就成功了。

我想我做错了什么,有人可以帮忙吗?

谢谢。

4

2 回答 2

1

你想要的是 Python 中的命名空间包。使用标准库的一种方法是使用pkgutil;另一种方法是使用分发或 setuptools 项目提供的第三方模块pkg_resources 。

PEP 382 将在标准库和解释器中改进对命名空间包的支持。

于 2012-02-25T05:28:29.960 回答
0

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

我们通过 Python 的导入钩子 PEP 302 使用引导来实现这一点:http: //www.python.org/dev/peps/pep-0302/

于 2011-06-01T07:06:43.073 回答