6

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

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

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

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

编辑:有关我要实现的目标的更多详细信息。

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

我还想在 Notebook 中使用mpld3库,在浏览他们的文档时,我发现他们还提到在“IPython 2.0+,如果添加 url 前缀(例如通过设置 NotebookApp.base_url),local=True 可能会失败”所以这似乎不是一个孤立的问题,一个好的解决方案是值得的。

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

4

2 回答 2

3

在前端,如果您发布 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在前端处理自己。

于 2015-07-01T01:09:00.217 回答
-1

在对 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']

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

于 2015-06-30T11:36:27.333 回答