如何从IPython 3.x/Jupyter笔记本中访问配置?
我特别想知道运行代码的笔记本服务器的如何从IPython 3.x/Jupyter笔记本中访问配置?,ipython,ipython-notebook,jupyter,Ipython,Ipython Notebook,Jupyter,我特别想知道运行代码的笔记本服务器的base\u url 在IPython笔记本2.x版中,我曾经执行以下操作: config=get\u ipython().config 打印配置['NotebookApp']['base\u url'] 但是,这在IPython Notebook 3.x/Jupyter笔记本中不再有效 编辑:关于我想要达到的目标的更多细节 我在同一台主机上的不同Docker容器中运行不同的IPython服务器,这些容器通过不同的base\u urls访问。我想用这个软件包
base\u url
在IPython笔记本2.x版中,我曾经执行以下操作:
config=get\u ipython().config
打印配置['NotebookApp']['base\u url']
但是,这在IPython Notebook 3.x/Jupyter笔记本中不再有效
编辑:关于我想要达到的目标的更多细节
我在同一台主机上的不同Docker容器中运行不同的IPython服务器,这些容器通过不同的base\u url
s访问。我想用这个软件包在笔记本中显示熊猫数据框。最初,qgrid
没有处理定制的base\u url
前缀来提供Javascript依赖项的本地副本,但是上面的代码允许我在IPython 2中找到base\u url
,并将相关的base\u url
注入Javascript模板
我还想使用笔记本中的库,在浏览他们的文档时,我发现他们也提到了,所以这似乎不是一个孤立的问题,一个好的解决方案是值得的
鉴于@matt在下面的评论,并考虑更多关于内核与前端剥离的问题,NotebookApp配置无法从内核访问是有道理的。实际上,生成的JS代码需要知道什么是
base\u url
,因此,如果有人能告诉我在笔记本JS API中可以在哪里访问它,应该可以解决这个问题。在深入研究IPython内部结构之后,我发现了一些适合我的东西:
从IPython.config.loader导入加载\u pyconfig\u文件
config=get_ipython().config
profiledir=config['profiledir']['location']
nbconfig=load_pyconfig_文件(['ipython_notebook_config.py'],profiledir)
打印nbconfig['NotebookApp']['base\u url']
编辑:这在我的安装中是有效的,但我现在明白内核并不是获取这些信息的正确位置。一旦有了更好的答案,我可能会删除这个答案。如果您发布javasscript,并假设您在笔记本中(请记住,在JS中并不一定意味着笔记本,您可以是Atom Hydrogen或Jupyter Sidecar),您可以使用snipet,如:
require(['base/js/utils'], function(utils){
var base_url = utils.get_body_data('base-url')
})
在笔记本的
标签上设置数据库url
属性
这样下去,虽然没有保证。通常,扩展应安装在nbextensions
文件夹中,该文件夹应自动正确解析:
require.config({
...
paths: {
nbextensions : '<base url>/nbextensions',
kernelspecs : '<base url>/kernelspecs',
...
})
require.config({
...
路径:{
nbextensions:“/nbextensions”,
kernelspecs:“/kernelspecs”,
...
})
Nbextension是一个搜索路径,因此如果在服务器上设置正确,则不应该(大多数情况下)你必须自己在自定义url上提供服务,也不能自己在前端处理
base\u url
。你为什么想要base\u url
。你想实现什么,然后我们可以讨论从哪里获得它。这取决于你是做JS扩展、服务器扩展还是内核扩展。@Matt谢谢你的评论。我有广告我对这个问题做了更详细的解释。在JS扩展中确实需要这样做。我没有仔细考虑它,并试图在内核中用Python解决它,因为这是我更熟悉的。添加了答案,没有真正了解mpld3和qgrid是如何做的,但我希望这会有所帮助。如果缺少一些东西,请提供反馈欢迎使用。请准备好在版本4中使用它。根据设计,运行代码的内核不知道笔记本服务器。