Python 2.7模拟相对导入

时间:2016-08-10 20:24:10

标签: python python-2.7 mocking python-sphinx python-import

背景:想要为一个包构建一个文档,它可以相对导入一个C-extension,例如。在__ init__.py中。让我们假设这个包叫做mypkg.sub。所以c_ext位于sub。

sub的sub.py:

from __future__ import absolute_import
from . import c_ext

当我模拟这个扩展时,我在我的Sphinx conf.py中执行以下操作:

from mock import Mock
sys.modules['mypkg.sub.c_ext'] = Mock()

但是我仍然遇到导入错误:

  

ImportError:无法导入名称c_ext

有趣的是,同样的东西适用于Python3(导入行为略有不同)。

任何提示都赞赏!

1 个答案:

答案 0 :(得分:0)

事实证明,如果它们是相对导入的,则不能在Python-2.7下模拟c扩展。我通过使用meta_path钩子来修补这些扩展来解决这个问题。