我想在python解释器中玩,但是已经完成了一堆导入和对象设置。现在我正在命令行启动解释器并每次都进行设置工作。有没有办法在完成所有初始化工作的情况下启动命令行解释器?
例如:
# Done automatically.
import foo
import baz
l = [1,2,3,4]
# Launch the interpreter.
launch_interpreter()
>> print l
>> [1,2,3,4]
答案 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)
没有任何额外的论据。