问题描述
|
我在两个不同的位置有模块
例如
位置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语句将成功。
我认为我做错了什么,有人可以帮忙吗?
谢谢。
解决方法
您想要的在Python中称为名称空间包。使用标准库执行这些操作的一种方法是使用pkgutil。另一种方法是使用由distribute或setuptools项目提供的第三方模块pkg_resources。
PEP 382将在标准库和解释器中改进对名称空间包的支持。
,似乎python导入机制不支持将单个包拆分为多个源树。
我们使用引导程序通过Python的导入钩子PEP 302实现了这一目标:http://www.python.org/dev/peps/pep-0302/