进入Python或IPython解释器时自动导入模块

147

每当我启动 Python 解释器时,我几乎总是要键入 import numpy as np。我应该如何设置 Python 或 IPython 解释器,以便自动导入numpy?

9个回答

95
对于ipython,有两种方法可以实现这一点。都涉及到ipython的配置目录,该目录位于~/.ipython中。
  1. 创建自定义ipython配置文件。
  2. 或者您可以将启动文件添加到~/.ipython/profile_default/startup/
为了简单起见,我会使用选项2。你所要做的就是把一个.py.ipy文件放在~/.ipython/profile_default/startup目录中,它就会自动执行。因此,你可以简单地在一个简单的文件中放置import numpy as np,并将np置于你的ipython提示符的命名空间中。
选项2实际上也适用于自定义配置文件,但使用自定义配置文件将允许您根据特定情况更改启动要求和其他配置。然而,如果你始终想让np对你可用,那么请把它放在启动目录中。
有关ipython配置的更多信息,请参阅文档中的更完整解释。

2
在Ubuntu 14.04中,实际的目录是:~/.config/ipython/profile_default/startup/而不是~/.ipython/profile_default/startup/ - Peter
1
很遗憾,上述的第二个选项不支持制表符自动完成。 - user1717828
在Ubuntu 20.04中,实际目录是:~/.ipython/profile_default/startup/而不是~/.config/ipython/profile_default/startup/ - ramwin

87

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

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

因此,只需创建带有导入语句的Python脚本,并将环境变量指向它即可。话虽如此,要记住“明确优于隐含”,因此不要依赖此行为用于生产脚本。

对于IPython,请参见此教程以了解如何创建ipython_config文件。


@mklauber,谢谢,但那里的被接受的解决方案已经过时了。不过,它确实启发了我的编辑。@ OP:请查看我的编辑答案。 - Dhara
3
截至撰写本文时(ipython 1.1.0版本),它也支持PYTHONSTARTUP。 - pflaquerre
设置 env PYTHONSTARTUP="~/.startup.py" 对我没有起作用。 - Seanny123
1
请注意 export PYTHONSTARTUP=~/.python_shell_startup.py 以设置变量。 - PallavBakshi

28

我使用一个类似这样的 ~/.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,当启动shell时Python将使用它。

打印语句放在那里是为了在启动shell时提醒我它已经在生效,并且已经导入了哪些内容。 pp 快捷键也非常方便...


在Linux上对我没用。我需要告诉Python查找我的主目录或其他什么吗? - Seanny123
糟糕:忘记了一个重要的步骤:我已经添加了它:定义PYTHONSTARTUP。 - Ned Batchelder
我从不确定~是否能够代替$HOME, 但是在 MacOS、fish 和 python3 中,我不得不使用绝对路径而非相对路径。 - rien333
现在已经存在pprint.pp(),因此您可能希望更改该快捷方式以避免混淆。 - wjandrea
我应该在哪里添加 PYTHONSTARTUP=~/.startup.py?难道我们不应该使用 " 来表示路径吗?(PYTHONSTARTUP="~/.startup.py") - Shayan

8

当创建一个自定义启动脚本时,像ravenac95 suggests这样是大多数情况下的最佳答案,但在想要使用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',
    ]

7
作为更简单的替代方法,对于linux平台: 只需定义一个别名,例如在您的~/.bash_aliases文件中添加alias pynp='python -i -c"import numpy as np"'。然后您可以使用pynp调用python+numpy,而仍然可以使用python来执行python脚本,不会影响其行为。

2
PYTHONSTARTUP is only invoked on interactive mode, so python scripts‘ behaviour is kept untouched anyways. An alias could also be created with a file reference: alias pynp='PYTHONSTARTUP="~/.startup.py" python' - F.Raab

4
你可以创建一个普通的 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... 选项,因此它不使用 * 导入,因为我更喜欢使用显式的 np....

这可以是一个快捷方式、别名或脚本。


0

我创建了一个小脚本,用于初始化带有你想要的代码的 ipython。

  • 在你的项目根目录下创建一个start.ipy文件。
  • 编辑创建的文件,添加所有需要进入 ipython 的内容。
  • ipython profile create <your_profile_name>。提示:不要将单词“profile”添加到名称中,因为 ipython 已经包含它。
  • cp start.ipy ~/.ipython/profile_<your_profile_name>/startup/start.ipy
  • 每次需要在 ipython 中加载所有内容时运行 ipython --profile=<your_profile_name>

使用这种解决方案,您无需设置任何环境变量。但是,您需要每次修改start.ipy文件时将其复制到ipython文件夹中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接