如何从IPython 3.x / Jupyter Notebook中访问配置?

时间:2015-06-30 09:52:21

标签: ipython ipython-notebook jupyter

特别是我想知道代码运行的Notebook Server的base_url

在IPython笔记本2.x版本中我曾经做过以下事情:

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

然而,这在IPython Notebook 3.x / Jupyter Notebooks中不再有效。

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

我在同一主机上的不同Docker容器中运行各种IPython服务器,这些容器通过不同的base_url访问。我想使用quantopian/qgrid包在Notebook中显示Pandas DataFrames。最初qgrid没有处理自定义base_url前缀来提供Javascript依赖项的本地副本,但上面的代码允许我在IPython 2中找到base_url并注入相关的base_url 1}}进入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中访问它的地方,那就应该解决它。

2 个答案:

答案 0 :(得分:3)

从前端方面来看,如果你发布javasscript,并假设你在笔记本中(请记住,在JS中不一定是笔记本,你可能是Atom-Hydrogen,或者是Jupyter-Sidecar)你可以使用snipet喜欢:

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

{1}}属性设置在笔记本的data-base-url标记上。

保持这种状态并不保证。通常,扩展名应安装在<body>文件夹中,该文件夹应自动正确解析:

nbextensions

Nbextension是一个搜索路径,所以如果在服务器上设置正确,你不应该(大部分时间)必须自己在自定义URL上提供服务,也不要在前端自己处理require.config({ ... paths: { nbextensions : '<base url>/nbextensions', kernelspecs : '<base url>/kernelspecs', ... }) 。< / p>

答案 1 :(得分:-1)

经过大量的IPython内部挖掘后,我发现了一些对我有用的东西:

def forkIOHandleLeft[A, B](ioab: IO[A \/ B])(handleLeft: A => Route)(implicit marshaller: B => ToResponseMarshallable) = 
  onSuccess(Future(ioab.unsafePerformIO))(_.fold(handleLeft, complete(_)))

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