运行python命令行解释器,导入自动加载

时间:2012-02-23 08:55:32

标签: python

我想在python解释器中玩,但是已经完成了一堆导入和对象设置。现在我正在命令行启动解释器并每次都进行设置工作。有没有办法在完成所有初始化工作的情况下启动命令行解释器?

例如:

# Done automatically.
import foo
import baz
l = [1,2,3,4]
# Launch the interpreter.
launch_interpreter()
>> print l
>> [1,2,3,4]

5 个答案:

答案 0 :(得分:27)

您可以使用要自动运行的代码创建脚本,然后使用python -i运行它。例如,使用以下命令创建一个脚本(我们称之为script.py):

import foo
import baz
l = [1,2,3,4]

然后运行脚本

$ python -i script.py
>>> print l
[1, 2, 3, 4]

脚本运行完毕后,python会让你进入一个交互式会话,脚本结果仍然存在。

如果你真的想在运行python的每个时间内完成一些事情,你可以将环境变量PYTHONSTARTUP设置为每次启动python时都会运行的脚本。请参阅interactive startup file上的文档。

答案 1 :(得分:5)

我使用.bash_profile

我的.pyrc有一个指向我的主文件夹for i <- 0..n, y <- 1..3, do: y 的路径,该路径作为其中的import语句。

https://docs.python.org/3/using/cmdline.html#envvar-PYTHONSTARTUP

答案 2 :(得分:3)

我在尝试为我的研究配置新的desk时遇到了这个问题,发现上面的答案并不适合我的愿望:将整个桌面配置包含在一个文件中(意思是我不会按照@srgerg的建议创建单独的script.py

这就是我最终实现目标的方式:

export PYTHONPATH=$READ_GEN_PATH:$PYTHONPATH

alias prepy="python3 -i -c \"
from naive_short_read_gen import ReadGen
from neblue import neblue\""

在这种情况下,neblue位于CWD中(因此不需要路径扩展),而naive_short_read_gen位于我的系统上的任意目录中,该目录通过$READ_GEN_PATH指定。

如有必要,您可以在一行中执行此操作:alias prepy=PYTHONPATH=$EXTRA_PATH:$PYTHONPATH python3 -i -c ...

答案 3 :(得分:0)

启动命令行时可以使用-s选项。详细信息在文档here

中给出

答案 4 :(得分:0)

我想我知道你想做什么。您可能想要检查IPython,因为如果不提供-i选项(至少不直接),则无法启动python解释器。 这就是我在项目中所做的:

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()

但是,您需要小心,因为shell将具有定义函数ipShell()的模块的命名空间。如果您将定义放在您运行的文件中,那么您将能够访问所需的globals()。可能还有其他的解决方法可以注入你想要的命名空间,b̶u̶t̶̶y̶u̶̶w̶o̶u̶l̶d̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶<<<<<。

修改

以下函数默认为调用者的命名空间(__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)

没有任何额外的论据。