0

我正在使用 Python2.7。当我输入 help() 并输入“模块”时,我收到消息

>>> help()
Welcome to Python 2.7! This is the online help utility.
...
help> modules
Please wait a moment while I gather a list of all available modules...

然后我收到一系列警告

Warning: cannot register existing type 'GtkWidget'
...
Warning: cannot add class private field to invalid type '<invalid>'
...

然后整个事情就挂了……到了我不得不开始第二个远程会话来发送 SIGKILL 的地步。

显然出了点问题,但最让我惊讶的是它可以通过网络收集信息。

Python 的帮助文档不是存储在本地吗?如何阻止它进入网络?我需要定期帮助,而不是在线帮助

4

2 回答 2

5

help()命令不在互联网上搜索;“在线”仅仅意味着您可以交互地使用它,在文档中它称之为“内置帮助系统”,这不太模棱两可。它的作用是遍历所有PYTHONPATH模块并尝试导入每个模块,以查看系统中哪些是可用模块。

这是用于获取模块列表的源代码(您可以在Lib/pydoc.pypython 源代码中找到):

    def listmodules(self, key=''):
        if key:
            self.output.write('''
Here is a list of matching modules.  Enter any module name to get more help.

''')
            apropos(key)
        else:
            self.output.write('''
Please wait a moment while I gather a list of all available modules...

''')
            modules = {}
            def callback(path, modname, desc, modules=modules):
                if modname and modname[-9:] == '.__init__':
                    modname = modname[:-9] + ' (package)'
                if modname.find('.') < 0:
                    modules[modname] = 1
            def onerror(modname):
                callback(None, modname, None)
            ModuleScanner().run(callback, onerror=onerror)
            self.list(modules.keys())
            self.output.write('''
Enter any module name to get more help.  Or, type "modules spam" to search
for modules whose descriptions contain the word "spam".
''')

ModuleScanner类简单地遍历内置模块和pkgutil.walk_packages找到的模块的地方,这个函数最终调用iter_modules导入器对象的方法。内置导入器支持从 Internet 导入模块,因此不会搜索 Internet。如果您安装自定义导入器,help() 则可能会触发互联网研究。

如果您有很多可用的模块,则此操作可能需要一些时间。一些模块也可能需要大量时间来导入(例如numpyscipy加载等可能需要几秒钟的时间)。

于 2013-08-13T21:05:39.317 回答
0

在控制台export PYTHONDOCS=/usr/share/doc/python2/html/上确定 python 应该在哪里搜索帮助。

于 2013-08-13T21:03:14.843 回答