【问题标题】:How does one access the configuration from inside a IPython 3.x / Jupyter Notebook?如何从 IPython 3.x / Jupyter Notebook 中访问配置?
【发布时间】:2015-06-30 09:52:21
【问题描述】:

我特别想知道运行代码的笔记本服务器的base_url

在 IPython Notebooks 2.x 版中,我曾经做过以下操作:

config = get_ipython().config
print config['NotebookApp']['base_url']

但是,这在 IPython Notebook 3.x / Jupyter Notebooks 中不再适用。

编辑:关于我想要达到的目标的更多细节。

我在同一主机上的不同 Docker 容器中运行各种 IPython 服务器,这些容器通过不同的base_urls 访问。我想使用 quantopian/qgrid 包在 Notebook 中显示 Pandas DataFrame。最初 qgrid 没有处理自定义 base_url 前缀来提供 Javascript 依赖项的本地副本,但上面的代码允许我在 IPython 2 中找到 base_url 并将相关的 base_url 注入到 Javascript 模板中。

我还想在 Notebook 中使用 mpld3 库,在浏览他们的文档时,我发现他们在 "IPython 2.0+, local=True may fail if a url prefix is added (e.g. by setting NotebookApp.base_url)" 中也提到了这一点,所以这似乎不是一个孤立的问题,值得一个好的解决方案.

鉴于@matt 在下面的评论并更多地考虑内核与前端拆分,因此无法从内核访问 NotebookApp 配置是有道理的。确实是生成的 JS 代码需要知道 base_url 是什么,所以如果有人能指出我可以在 Notebook JS API 中访问它的位置,那应该可以解决它。

【问题讨论】:

  • 你为什么要base_url。你想达到什么目标,然后我们可以讨论从哪里得到它。这取决于你是做 JS 扩展、服务器扩展还是内核扩展。
  • @Matt 感谢您的评论。我为这个问题添加了更多细节。这确实在 JS 扩展中是必需的。我没有仔细考虑它,并试图在内核中用 Python 解决它,因为这是我更熟悉的。
  • 添加了答案,还没有真正了解 mpld3 和 qgrid 是如何做事的,但我希望这会有所帮助。如果缺少东西,欢迎提供反馈。

标签: ipython ipython-notebook jupyter


【解决方案1】:

从前端,如果您发布 javascript,并假设您在笔记本中(请记住,在 JS 中并不一定意味着笔记本,您可以是 Atom-Hydrogen 或 Jupyter-Sidecar),您可以使用像这样的片段:

require(['base/js/utils'], function(utils){
    var base_url = utils.get_body_data('base-url')
})

data-base-url 属性设置在笔记本的 <body> 标记上。

虽然不能保证保持这种状态。通常,扩展程序应该安装在nbextensions 文件夹中,它应该会自动正确解析:

require.config({

      ...
      paths: {
        nbextensions : '<base url>/nbextensions',
        kernelspecs : '<base url>/kernelspecs',
...
})

Nbextension 是一个搜索路径,因此如果在服务器上正确设置,您不应该(大部分时间)必须自己在自定义 URL 上提供服务,也不必在前端自己处理 base_url

【讨论】:

    【解决方案2】:

    在对 IPython 内部进行了大量研究之后,我发现了一些对我有用的东西:

    from IPython.config.loader import load_pyconfig_files
    config = get_ipython().config
    profiledir = config['ProfileDir']['location']
    nbconfig = load_pyconfig_files(['ipython_notebook_config.py'], profiledir)
    print nbconfig['NotebookApp']['base_url']
    

    编辑:这适用于我的安装,但我现在明白内核并不是获取此信息的正确位置。一旦出现更好的答案,我可能会删除此答案。

    【讨论】:

    • 准备好在版本 4 中出现这种情况。根据设计,运行代码的内核不知道笔记本服务器。
    猜你喜欢
    • 2017-05-28
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 2013-07-22
    • 1970-01-01
    相关资源
    最近更新 更多