【问题标题】:How %load_ext work in ipython%load_ext 如何在 ipython 中工作
【发布时间】:2015-09-23 06:27:47
【问题描述】:

我安装包:https://github.com/jaysw/ipydb

根据教程,我应该使用它来启用它,

$ ipython
In [1] : %load_ext ipydb

它看起来像一个 IPython 扩展。

但我感到困惑,这个包没有安装在我的“~/.ipython/extentions”下

aaron@aarons-MacBook-Pro:~/Desktop/github/ipydb$ls ~/.ipython/extensions/
aaron@aarons-MacBook-Pro:~/Desktop/github/ipydb$ls ~/.ipython/nbextensions/
livereveal usability

所以,我想知道

  • %load_ext 魔法是如何工作的,或者当我输入“%load_ext ipydb”时发生了什么

  • 如果我只输入“ipython”,ipython 将如何进行配置,这将使用默认配置文件,但我的“~/.ipython/profile_default/”下没有配置文件

下面是默认配置文件和一个用户定义的配置文件:

aaron@aarons-MacBook-Pro:~/Desktop/github/ipydb$ls ~/.ipython/profile_default/
db             history.sqlite log            nbconfig       pid            security       startup        static
aaron@aarons-MacBook-Pro:~/Desktop/github/ipydb$ipython profile create my_profile
[ProfileCreate] Generating default config file: u'/Users/aaron/.ipython/profile_my_profile/ipython_config.py'
[ProfileCreate] Generating default config file: u'/Users/aaron/.ipython/profile_my_profile/ipython_kernel_config.py'
[ProfileCreate] Generating default config file: u'/Users/aaron/.ipython/profile_my_profile/ipython_console_config.py'
[ProfileCreate] Generating default config file: u'/Users/aaron/.ipython/profile_my_profile/ipython_qtconsole_config.py'
[ProfileCreate] Generating default config file: u'/Users/aaron/.ipython/profile_my_profile/ipython_notebook_config.py'
[ProfileCreate] Generating default config file: u'/Users/aaron/.ipython/profile_my_profile/ipython_nbconvert_config.py'
aaron@aarons-MacBook-Pro:~/Desktop/github/ipydb$ls ~/.ipython/profile_my_profile/
ipython_config.py           ipython_nbconvert_config.py log                         startup
ipython_console_config.py   ipython_notebook_config.py  pid                         static
ipython_kernel_config.py    ipython_qtconsole_config.py security
aaron@aarons-MacBook-Pro:~/Desktop/github/ipydb$

谢谢,

【问题讨论】:

    标签: ipython ipython-notebook ipython-magic


    【解决方案1】:

    好的,最后,我才弄明白在ipython中加载扩展的逻辑:

    源代码开启:https://github.com/ipython/ipython/blob/master/IPython/core/extensions.py

    核心逻辑是:

    def load_extension(self, module_str):
            """Load an IPython extension by its module name.
            Returns the string "already loaded" if the extension is already loaded,
            "no load function" if the module doesn't have a load_ipython_extension
            function, or None if it succeeded.
            """
            if module_str in self.loaded:
                return "already loaded"
    
            from IPython.utils.syspathcontext import prepended_to_syspath
    
            with self.shell.builtin_trap:
                if module_str not in sys.modules:
                    with prepended_to_syspath(self.ipython_extension_dir):
                        __import__(module_str)
                mod = sys.modules[module_str]
                if self._call_load_ipython_extension(mod):
                    self.loaded.add(module_str)
                else:
                    return "no load function"
    

    现在说得通了,感谢 IPython 团队构建了如此出色的工具,我真的很喜欢它。

    【讨论】:

      猜你喜欢
      • 2012-10-26
      • 1970-01-01
      • 2018-02-08
      • 1970-01-01
      • 2016-04-27
      • 2017-02-06
      • 2014-10-06
      • 1970-01-01
      • 2012-06-01
      相关资源
      最近更新 更多