2016-08-10 104 views
2

背景:想要建立一個包的相關文件,例如相對導入一個C擴展。在__init__.py中。讓我們假設這個包叫做mypkg.sub。所以c_ext駐留在子。Python 2.7模擬相對導入

init.py分:

from __future__ import absolute_import 
from . import c_ext 

當我嘲笑這個擴展我在我的獅身人面像conf.py如下:

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

但是我仍然得到一個導入錯誤:

ImportError: cannot import name c_ext

有趣的是,同樣的事情對Python3(它有一個稍微不同的導入行爲)的作品。

任何提示讚賞!

回答

0

事實證明,如果Python-2.7相對導入,就不能模擬Python-2.7下的c-extensions。我通過使用meta_path掛鉤來修補這些擴展。