输入python或ipython解释器时自动导入模块


119

我发现自己import numpy as np几乎每次启动python解释器时都要输入。如何设置python或ipython解释器,以便自动导入numpy?

Answers:


70

使用环境变量PYTHONSTARTUP。根据官方文档:

如果这是可读文件的名称,则在以交互方式显示第一个提示之前,将执行该文件中的Python命令。在与执行交互命令相同的名称空间中执行文件,以便在其中定义或导入的对象可以在交互会话中使用而无需限定。

因此,只需使用import语句创建一个python脚本,然后将环境变量指向该脚本即可。话虽如此,请记住,“显式总是比隐式更好”,因此不要在生产脚本中依赖此行为。

对于Ipython,请参阅教程,了解如何制作ipython_config文件


@mklauber,谢谢,但是已弃用了那里接受的解决方案。但是,它确实激发了我的编辑。@ OP:请参阅我编辑的答案
Dhara 2012年

3
在撰写本文时(ipython 1.1.0),@ user545424也支持PYTHONSTARTUP。
pflaquerre 2014年

设置env PYTHONSTARTUP="~/.startup.py"对我不起作用
Seanny123

只需注意export PYTHONSTARTUP=~/.python_shell_startup.py设置变量。
PallavBakshi

77

对于ipython,有两种方法可以实现此目的。两者都涉及位于的ipython的配置目录~/.ipython

  1. 创建一个自定义的ipython配置文件。
  2. 或者您可以将启动文件添加到 ~/.ipython/profile_default/startup/

为简单起见,我将使用选项2。您所要做的就是在目录中放置一个.py.ipy文件,~/.ipython/profile_default/startup它将自动执行。因此,您可以将其放置import numpy as np在简单文件中,然后在ipython提示符的名称空间中使用np。

选项2实际上将与自定义配置文件一起使用,但是使用自定义配置文件将使您可以根据特定情况更改启动要求和其他配置。但是,如果您始终希望np有空,请务必将其放在启动目录中。

有关ipython配置的更多信息。该文档有一个更完整的解释。


2
在Ubuntu 14.04中,目录实际上是:~/.config/ipython/profile_default/startup/而不是~/.ipython/profile_default/startup/
Peter

1
不幸的是,上面的选项2不允许制表符补全。
user1717828 '18

21

我使用〜/ .startup.py文件,如下所示:

# Ned's .startup.py file
print("(.startup.py)")
import datetime, os, pprint, re, sys, time
print("(imported datetime, os, pprint, re, sys, time)")

pp = pprint.pprint

然后定义PYTHONSTARTUP =〜/ .startup.py,Python将在启动shell时使用它。

打印语句在那里,因此当我启动外壳程序时,会提醒我它已经生效,并且已经导入了什么内容。该pp快捷方式实在是太好用太...


在Linux上对我不起作用。我是否必须告诉Python查找主目录或其他内容?
Seanny123

糟糕:忘记了重要的一步:我添加了它:定义PYTHONSTARTUP
Ned Batchelder 2015年

我永远不知道什么时候~可以代替$HOME,但是我不得不在MacOS,fish和python3上使用绝对路径,而不是相对路径。
rien333

@Ned Batchelder,非常感谢,这就是我想要的。旁边的问题,我在Windows和pp快捷方式上无法使用此功能。>>> pp <在0x0000020DAF90C8C8上的功能pprint> >>> pp()追溯(最近一次调用):文件“ <stdin>”,<模块>中的第1行,TypeError:pprint()丢失1所需的位置参数:“对象” >>>
永远的学习者'18年

5

虽然在大多数情况下创建诸如ravenac95 建议之类的自定义启动脚本是最佳的通用答案,但在要使用的情况下它将无法正常工作from __future__ import X。如果您有时在Python 2.x中工作,但想使用现代除法,则只有一种方法可以做到这一点。创建配置文件后,编辑profile_default(对于Ubuntu,位于~/.ipython/profile_default),然后在底部添加以下内容:

c.InteractiveShellApp.exec_lines = [
    'from __future__ import division, print_function',
    'import numpy as np',
    'import matplotlib.pyplot as plt',
    ]

3

在Linux上,作为可接受答案的更简单替代方法:

只需定义一个别名即可,例如放入alias pynp='python -i -c"import numpy as np"'您的〜/ .bash_aliases文件中。然后pynp,您可以使用调用python + numpy ,并且仍然可以仅使用python python。Python脚本的行为保持不变。


PYTHONSTARTUP仅在交互模式下调用,因此python脚本的行为始终保持不变。也可以使用文件引用创建别名:alias pynp='PYTHONSTARTUP="~/.startup.py" python'
F.Raab

2

您可以创建普通的python脚本,也可以根据需要创建import_numpy.py任何脚本

#!/bin/env python3
import numpy as np

然后用-i标志启动它。

python -i import_numpy.py

这样,您便可以灵活地只为不同的项目选择所需的模块。


1

正如ravenac95在他的回答中提到的那样,您可以创建自定义配置文件或修改默认配置文件。此答案是import numpy as np自动需要的Linux命令的快速视图。

如果要使用名为的定制概要文件numpy,请运行:

ipython profile create numpy
echo 'import numpy as np' >> $(ipython locate profile numpy)/startup/00_imports.py
ipython --profile=numpy

或者,如果您想修改默认配置文件以始终导入numpy:

echo 'import numpy as np' >> $(ipython locate profile default)/startup/00_imports.py
ipython

查看IPython配置教程,以深入了解配置文件。请参阅.ipython/profile_default/startup/README以了解启动目录的工作方式。


1

我的默认ipython调用是

ipython --pylab --nosep --InteractiveShellApp.pylab_import_all=False

--pylab已经有ipython一段时间了。它导入numpy和(的一部分)matplotlib。我添加了该--Inter...选项,因此它不使用*导入,因为我更喜欢使用explicit np....

这可以是快捷方式,别名或脚本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.