自动导入IPython中缺少的模块。
ipython-autoimport的Python项目详细描述
在ipython中自动导入缺少的模块:而不是
In [1]: plt.plot([1, 2], [3, 4]) --------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-1-994ba2bf13c0> in <module>() ----> 1 plt.plot([1, 2], [3, 4]) NameError: name 'plt' is not defined In [2]: from matplotlib import pyplot as plt In [3]: plt.plot([1, 2], [3, 4]) Out[3]: [<matplotlib.lines.Line2D at 0x7f73f0179198>]
照我说的做:
In [1]: plt.plot([1, 2], [3, 4]) Autoimport: from matplotlib import pyplot as plt Out[1]: [<matplotlib.lines.Line2D at 0x7f7e253552b0>]
灵感来自@orangeflash81的version,有很多 改进:
- 不依赖于重新执行,而是挂接用户命名空间;因此, 即使在有副作用的情况下也是安全的,并且可以完成制表和 魔法也是。
- 从历史中学习您喜欢的别名。
- 抑制不相关的链接回溯。
- 自动导入子模块。
- pip-可安装。
安装
从中选择一个:
$ pip install ipython-autoimport # from PyPI $ pip install git+https://github.com/anntzer/ipython-autoimport # from Github
然后附加^{tt2}的输出$ 到ipython profile locate的输出(通常 ~/.ipython/profile_default/ipython_config.py)。
使用pytest运行测试(在python 3.3上,测试需要pathlib)。
限制
结构如
class C: auto_imported_value
不会工作,因为它们是使用类局部变量(而不是 修补的局部变量);修补全局变量将不起作用,因为LOAD_NAME查询 使用PyDict_GetItem的全局变量(注意,它使用 PyObject_GetItem;还有,LOAD_GLOBALS查询两个全局和 使用PyObject_GetItem的内置程序,这样我们就可以轻松修补 内置指令相反,但这似乎有点太侵入…。