RichIPythonWidget导入pkgutil模块的副作用

时间:2014-05-30 17:26:53

标签: python python-2.7 ipython

显然,导入RichIPythonWidget会对模块pkgutil产生影响。

测试环境:

IPython版本:2.1.0 python版本:2.7& 2.7.6

代码显示问题:

import os
import pkgutil

print 'Before 1 ... '
pkgutil.find_loader('os') # call 1
print 'After call 1 ... '

from IPython.qt.console.rich_ipython_widget import RichIPythonWidget

print 'Before call 2 ... '
pkgutil.find_loader('os') # call 2
print 'After call 2 ... '

输出:

Before call 1 ... 
After call 1 ... 
Before call 2 ... 
Traceback (most recent call last):
  File "issue.py", line 11, in <module>
    pkgutil.find_loader('os') # call 2
  File "/u/bl/Dev/work/inkqt/opt.SuSE-11.4/lib64/python2.7/pkgutil.py", line 467, in find_loader
    loader = importer.find_module(fullname)
TypeError: find_module() takes exactly 3 arguments (2 given)

据我了解,我的问题似乎与添加到 sys.meta_path 的对象有关 通过 IPython ,但 pkgutil 模块使用错误的界面。 但是我很难决定谁有罪......

非常感谢任何解决方法。

THX

-benoit

1 个答案:

答案 0 :(得分:1)

这很可能是由于IPython在IPython / external / qt_loaders.py中安装了Qt ImportDenier。 find_module方法不尊重finder.find_module(fullname, path=None)的PEP302签名,其中路径是可选的。

我在IPython上提交了一个问题:https://github.com/ipython/ipython/issues/5932