Python:只要调用了帮助(' modules'),Kivy就会自动启动

时间:2015-04-23 19:34:55

标签: python kivy

我刚刚安装了 Kivy ,发现如果我拨打help('modules'),它会以某种方式自动启动。

虽然我还没有导入模块,但仍会发生这种情况。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

这是一个已知的(虽然有趣)错误:

https://github.com/kivy/kivy/issues/1445

它的历史可以追溯到2013年,所以可能不容易修复,但你总是可以在git问题部分施加压力。

答案 1 :(得分:1)

help('modules')通过遍历Python安装的整个包树并读取源代码(如果模块是纯Python并且有源代码可用),或者如果它是扩展名,则将其加载到解释器中(或者没有源代码的Python模块。)

pkg_util.walk_packages还有另一个案例,它将导入包。如果包或扩展名导入具有副作用,则会由help('modules')触发。

一种可能的解决方法是在sys.modules中清除违规模块,但当然这不是解决方案:

def myhelp(*args):
  sys.modules['offender'] = None
  help(*args)
  sys.modules.pop('offender')

您需要知道的是违规模块的名称(kivy?)。您甚至可以将此代码放入sitecustomize.py并覆盖内置help函数。

正确的解决方案当然是修复上游,因为对模块导入的副作用通常是一件坏事(因为它们可以有各种......好的,副作用)。