【问题标题】:How can I recreate the effect of IPython's '--pylab' option with a script?如何使用脚本重新创建 IPython 的“--pylab”选项的效果?
【发布时间】:2023-03-02 22:54:01
【问题描述】:

我想创建一个与 IPython 的 --pylab 标志“手动”执行相同操作的配置文件。脚本的内容应该是什么——包导入、命名空间指定、设置等——来实现这一点?

作为替代方案,我还想知道是否有办法检查当前 IPython 会话启动时是否设置了 --pylab 标志。


简单地做from matplotlib.pylab import * 不起作用,%pylab 也不起作用(因为个人资料中似乎不允许使用魔法)。

【问题讨论】:

    标签: python python-2.7 import matplotlib ipython


    【解决方案1】:

    深入了解帮助和手册页($ ipython --help-all 然后搜索“pylab”)发现:

    --pylab=<CaselessStrEnum> (InteractiveShellApp.pylab) # mean is an alias for
    
    --InteractiveShellApp.pylab=<CaselessStrEnum>
        Default: None
        Choices: ['auto', 'gtk', 'inline', 'osx', 'qt', 'qt4', 'tk', 'wx']
        Pre-load matplotlib and numpy for interactive use, selecting a particular
        matplotlib backend and loop integration.
    --InteractiveShellApp.pylab_import_all=<Bool>
        Default: True
        If true, IPython will populate the user namespace with numpy, pylab, etc.
        and an ``import *`` is done from numpy and pylab, when using pylab mode.
        When False, pylab mode should not import any names into the user namespace.
    


    所以c.InteractiveShellApp.pylab='auto' 在你加载的任何configurationprofile 中都可以解决问题。

    (同意 Andrew 的观点,这样隐藏是不合常理的。)

    【讨论】:

      【解决方案2】:

      在 ipython 的意义上,您可以通过创建一个新的 iPython 配置文件来做到这一点

      ipython profile create <name>
      

      编辑 ipython_config.py 目录。在 linux 下较新安装的 ipython 中,此文件将位于 ~/.config/ipython/profile_&lt;name&gt; 目录中,但如果您不确定,可以找到它:

      ipython profile locate <name>
      

      对于我来说,我可以使用 bash 命令编辑相应的文件:

      vim `ipython profile locate <name>`/ipython_config.py
      

      编辑该文件中的适当变量(参见 ipython 文档)。


      在更一般的意义上,您可以通过设置PYTHONSTARTUP 环境变量并将其指向包含命令的python 文件来强制python 在启动时运行任意代码。要等效于--pylab,该文件需要具有以下内容(等效于 ipython 1.1)。

      # See: http://ipython.org/ipython-doc/rel-1.1.0/api/generated/IPython.core.magics.pylab.html
      import numpy
      import matplotlib
      from matplotlib import pylab, mlab, pyplot
      np = numpy
      plt = pyplot
      
      from IPython.display import display
      from IPython.core.pylabtools import figsize, getfigs
      
      from pylab import *
      from numpy import *
      

      根据过去的经验,设置您的 PYTHONSTARTUP 变量可能是个坏主意。你所有的 Python 代码都必须有一个 x-session(或等效的),除非你正在设置一个不弹出绘图窗口的后端。它还会污染你运行的所有东西的全局命名空间,并且会减慢解释器的速度(尤其是 matplotlib 在我的机器上导入需要相当长的时间)。

      【讨论】:

      • 是否比使用--pylab 标志更慢或更污染?此外,这些行似乎不足以模仿--pylab 标志(例如x = randn(10000) 给出“NameError: name 'randn' is not defined”)。
      • 关于这比 --pylab 更污染?不,不是。但它也远不那么明显(来自python的禅宗“显式优于隐式”)
      • 我已经修复了导入列表 - 它仍然不完美,但在正常情况下,差异应该可以忽略不计。
      • 是的,我知道它是非pythonic。这只是为了方便,但我也明白为什么这是一个坏习惯。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      相关资源
      最近更新 更多