ipython 笔记本配置选项被忽略,除非放在常规配置文件中

ipython notebook config options ignored unless placed in regular config file

OS X 10.6.8,ipython 从 1.something(来自 fink)升级到 3.0.0(使用 pip)。除了配置问题外,一切似乎都正常。

根据文档和我自己的测试,我无法理解 .ipython/profile_default/ipython_config.pyipython_notebook_config.py.

中配置选项的预期行为

我想为我的笔记本自动加载几个扩展和模块,但不为我的常规 ipython 会话自动加载(部分原因是这些加载会产生警告,但看起来我应该是能够将这些配置分开)。仅适用于笔记本的配置选项进入笔记本配置似乎是有道理的。但是当我把选项放在 ipython_config.py 中时,我只能让笔记本兑现我的选择。它似乎忽略了笔记本配置,我坚持使用非笔记本 ipython 也加载这些模块。难道我做错了什么?

文档没有明确说明这些区别,这些文件中的内联注释也没有提到这两个配置文件之间的区别,只是提到了 TerminalIPythonApp 从 Application 和 InteractiveShellApp 继承(但相同 class 两个配置文件中的名称)。笔记本配置读取的规则是什么? ipython 是否先从一个读取,然后从另一个读取?目前,它似乎完全忽略了 ipython_notebook_config.py,那么为什么它在那里?

可能与 2013 年的这个有关:http://mail.scipy.org/pipermail/ipython-user/2013-February/012170.html 但是此时修复他的问题的提交肯定在主仓库中,所以可能不...

ipython notebook --debug的结果是

[D 10:37:52.595 NotebookApp] Config changed:
[D 10:37:52.595 NotebookApp] {'NotebookApp': {'log_level': 10}}
[D 10:37:52.596 NotebookApp] IPYTHONDIR set to: /Users/robclewley/.ipython
[I 10:37:52.598 NotebookApp] Using existing profile dir: u'/Users/robclewley/.ipython/profile_default'
[D 10:37:52.598 NotebookApp] Searching path [u'/Users/robclewley/Work/literate_modeling/scenario-local-linear/notebook/project', u'/Users/robclewley/.ipython/profile_default', '/usr/local/etc/ipython', '/etc/ipython'] for config files
[D 10:37:52.598 NotebookApp] Attempting to load config file: ipython_config.py
[D 10:37:52.600 NotebookApp] Loaded config file: /Users/robclewley/.ipython/profile_default/ipython_config.py
[D 10:37:52.601 NotebookApp] Config changed:
[D 10:37:52.601 NotebookApp] {'TerminalInteractiveShell': {'logstart': True}, 'NotebookApp': {'log_level': 10}, 'TerminalIPythonApp': {'matplotlib': 'osx'}}
[D 10:37:52.602 NotebookApp] Attempting to load config file: ipython_notebook_config.py
[D 10:37:52.604 NotebookApp] Loaded config file: /Users/robclewley/.ipython/profile_default/ipython_notebook_config.py
[D 10:37:52.605 NotebookApp] Config changed:
[D 10:37:52.605 NotebookApp] {'TerminalInteractiveShell': {'logstart': True}, 'NotebookApp': {'log_level': 10}, 'InteractiveShellApp': {'exec_lines': ['import notebook_importing'], 'gui': 'osx', 'pylab': 'osx', 'matplotlib': 'osx', 'extensions': ['yaml_magic', 'autoreload'], 'extra_extension': 'yaml_magic'}, 'TerminalIPythonApp': {'extra_extension': 'yaml_magic', 'extensions': ['yaml_magic'], 'matplotlib': 'osx'}}
[D 10:37:52.611 NotebookApp] searching for local mathjax in [u'/Users/robclewley/.ipython/nbextensions', '/sw/share/jupyter/nbextensions', '/usr/local/share/jupyter/nbextensions', '/usr/share/jupyter/nbextensions']
[D 10:37:52.613 NotebookApp] searching for local mathjax in [u'/Users/robclewley/.ipython/profile_default/static', '/sw/lib/python2.7/site-packages/IPython/html/static']
[I 10:37:52.613 NotebookApp] Using MathJax from CDN: https://cdn.mathjax.org/mathjax/latest/MathJax.js

例如,在笔记本中调用魔术命令 %%yaml(来自我的自定义扩展)会导致无法识别该命令的投诉。相反,如果我将这些扩展设置为在 ipython_config.py 中加载,那么笔记本会立即接受 %%yaml。在这种情况下,调试输出为:

[D 10:46:50.330 NotebookApp] Config changed:
[D 10:46:50.330 NotebookApp] {'NotebookApp': {'log_level': 10}}
[D 10:46:50.331 NotebookApp] IPYTHONDIR set to: /Users/robclewley/.ipython
[I 10:46:50.332 NotebookApp] Using existing profile dir: u'/Users/robclewley/.ipython/profile_default'
[D 10:46:50.332 NotebookApp] Searching path [u'/Users/robclewley/Work/literate_modeling/scenario-local-linear/notebook/project', u'/Users/robclewley/.ipython/profile_default', '/usr/local/etc/ipython', '/etc/ipython'] for config files
[D 10:46:50.332 NotebookApp] Attempting to load config file: ipython_config.py
[D 10:46:50.335 NotebookApp] Loaded config file: /Users/robclewley/.ipython/profile_default/ipython_config.py
[D 10:46:50.336 NotebookApp] Config changed:
[D 10:46:50.337 NotebookApp] {'TerminalInteractiveShell': {'logstart': True}, 'NotebookApp': {'log_level': 10}, 'InteractiveShellApp': {'extensions': ['yaml_magic', 'autoreload']}, 'TerminalIPythonApp': {'matplotlib': 'osx'}}
[D 10:46:50.337 NotebookApp] Attempting to load config file: ipython_notebook_config.py
[D 10:46:50.338 NotebookApp] Loaded config file: /Users/robclewley/.ipython/profile_default/ipython_notebook_config.py
[D 10:46:50.339 NotebookApp] Config changed:
[D 10:46:50.340 NotebookApp] {'TerminalInteractiveShell': {'logstart': True}, 'NotebookApp': {'log_level': 10}, 'InteractiveShellApp': {'extra_extension': 'yaml_magic', 'extensions': ['yaml_magic', 'autoreload'], 'exec_lines': ['import notebook_importing'], 'gui': 'osx', 'pylab': 'osx', 'matplotlib': 'osx'}, 'TerminalIPythonApp': {'extra_extension': 'yaml_magic', 'extensions': ['yaml_magic'], 'matplotlib': 'osx'}}
[D 10:46:50.345 NotebookApp] searching for local mathjax in [u'/Users/robclewley/.ipython/nbextensions', '/sw/share/jupyter/nbextensions', '/usr/local/share/jupyter/nbextensions', '/usr/share/jupyter/nbextensions']
[D 10:46:50.345 NotebookApp] searching for local mathjax in [u'/Users/robclewley/.ipython/profile_default/static', '/sw/lib/python2.7/site-packages/IPython/html/static']

谢谢。

同时,这里回答了这个问题: http://comments.gmane.org/gmane.comp.python.ipython.user/11941

本质上,内核和笔记本服务器是不同的。内核的配置文件(默认情况下在我的系统上丢失)是根全局配置选项所在的位置。在论坛帖子中,将提供有关此结构的更清晰的文档。