run python command line interpreter with imports loaded automatically

后端 未结 5 567
执笔经年
执笔经年 2021-02-07 02:54

I would like to play around in the python interpreter but with a bunch of imports and object setup completed. Right now I\'m launching the interpreter on the command line and do

5条回答
  •  梦谈多话
    2021-02-07 03:26

    I think I know what you want to do. You might want to check IPython, because you cannot start the python interpreter without giving the -i option (at least not directly). This is what I did in my project:

    def ipShell():
        '''Starts the interactive IPython shell'''
        import IPython
        from IPython.config.loader import Config
        cfg = Config()
        cfg.TerminalInteractiveShell.confirm_exit = False
        IPython.embed(config=cfg, display_banner=False)
    # Then add the following line to start the shell
    ipShell()
    

    You need to be careful, though, because the shell will have the namespace of the module that the function ipShell() is defined. If you put the definition in the file you run, then you will be able to access the globals() you want. There could be other workarounds to inject the namespace you want, b̶u̶t̶ ̶y̶o̶u̶ ̶w̶o̶u̶l̶d̶ ̶h̶a̶v̶e̶ ̶t̶o̶ ̶g̶i̶v̶e̶ ̶a̶r̶g̶u̶m̶e̶n̶t̶s̶ ̶t̶o̶ ̶t̶h̶e̶ ̶f̶u̶n̶c̶t̶i̶o̶n̶ ̶i̶n̶ ̶t̶h̶a̶t̶ ̶c̶a̶s̶e̶.

    EDIT

    The following function defaults to caller's namespace (__main__.__dict__).

    def ipShell():
        '''Starts the interactive IPython shell
        with the namespace __main__.__dict__'''
        import IPython
        from __main__ import __dict__ as ns
        from IPython.config.loader import Config
        cfg = Config()
        cfg.TerminalInteractiveShell.confirm_exit = False
        IPython.embed(config=cfg, user_ns=ns, display_banner=False)
    

    without any extra arguments.

提交回复
热议问题