特别是我想知道代码运行的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中访问它的地方,那就应该解决它。
答案 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(_)))
编辑:这适用于我的安装,但我现在明白内核并不是获取此信息的正确位置。一旦有了更好的答案,我可能会删除这个答案。