如何解决pyinstaller对“ builtins.help”有什么作用
我正在尝试使用PyInstaller构建一个简单的Python交互式控制台应用程序。
我希望Python help()可用,但是PyInstaller似乎以某种方式更改了builtins
的内容并删除了帮助。
这是一个打开Python窗口的简单脚本。当我直接在Windows命令提示符中运行此脚本时,可以从交互式会话访问help()
。
import code
code.InteractiveConsole().interact()
但是,如果我通过以下方式构建可执行文件
PyInstaller test.py
并运行它,help
不可用。当我查看builtins
的内容时,我发现它不包含在内。
我在Windows 10上,使用最新的Python 3.8版本。
更新:由于以下Nico的建议,以下代码恢复了内置quit()
,exit()
和copyright()
函数,这些函数已被pyinstaller删除。 / p>
import code
import builtins
if not hasattr(builtins,'help'):
import _sitebuiltins
if os.sep == '\\':
eof = 'Ctrl-Z plus Return'
else:
eof = 'Ctrl-D (i.e. EOF)'
builtins.quit = _sitebuiltins.Quitter('quit',eof)
builtins.exit = _sitebuiltins.Quitter('exit',eof)
builtins.help = _sitebuiltins._Helper()
builtins.copyright = _sitebuiltins._Printer("copyright",sys.copyright)
code.InteractiveConsole().interact()
解决方法
这是由于PyInstaller使用了伪造的 site.py -它还破坏了交互式外壳中的quit()和许可功能。您需要对其进行一些更改,最后添加以下代码(从cPython 3.7源码中借来):
import os
import sys
import builtins
import _sitebuiltins
def setquit():
"""Define new builtins 'quit' and 'exit'.
These are objects which make the interpreter exit when called.
The repr of each object contains a hint at how it works.
"""
if os.sep == '\\':
eof = 'Ctrl-Z plus Return'
else:
eof = 'Ctrl-D (i.e. EOF)'
builtins.quit = _sitebuiltins.Quitter('quit',eof)
builtins.exit = _sitebuiltins.Quitter('exit',eof)
def sethelper():
builtins.help = _sitebuiltins._Helper()
def main():
"""Add standard site-specific directories to the module search path.
This function is called automatically when this module is imported,unless the python interpreter was started with the -S flag.
"""
setquit()
sethelper()
main()
我使用这些更改通过有效的交互式shell构建web2py / py4web二进制文件(如果需要,请参阅我的github存储库)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。