默认情况下在Jupyter笔记本中配置第一个单元格

Dem*_*ann 11 python jupyter jupyter-notebook

TI有没有办法在Jupyter笔记本中为特定的python内核配置默认的第一个单元?我同意默认的python导入违反了良好的编码习惯.

那么,我可以配置笔记本,以便新的python笔记本的第一个单元格始终

import numpy as np
Run Code Online (Sandbox Code Playgroud)

例如?

MCM*_*MZL 6

如上所述创建IPython概要文件是一个很好的第一个解决方案,但是IMO并不完全令人满意,尤其是在代码共享方面。

通过命令exec_lines导入的库的名称不会显示在笔记本中,因此您可以轻松地将其忘记。在其他配置文件/机器上运行代码会引发错误。

因此,我建议使用Jupyter笔记本扩展,因为会显示导入的库。这样可以避免在笔记本的开头导入始终相同的库。 首先,您需要安装Jupyter的nbextension。您可以克隆仓库:https : //github.com/ipython-contrib/jupyter_contrib_nbextensions 或使用pip:pip install jupyter_contrib_nbextensions

然后,可以通过将文件夹“ default_cells”添加到安装nb扩展名的路径来创建nb扩展名。例如,在Ubuntu上,它是/ usr / local / share / jupyter / nbextensions /。也许在Windows上:C:\ Users \ xxx.xxx \ AppData \ Roaming \ jupyter \ nbextensions \

您必须在此文件夹中创建3个文件:

  • main.js包含扩展的js代码
  • Jupyter中API的default_cells.yaml描述
  • README.MD是出现在API中的阅读器的常用描述。

我使用的代码来自:https: //github.com/jupyter/notebook/issues/1451 我的main.js是:

define([
    'base/js/namespace'
], function(
    Jupyter
) {
    function load_ipython_extension() {
      if (Jupyter.notebook.get_cells().length===1){
   //do your thing
        Jupyter.notebook.insert_cell_above('code', 0).set_text("# Scientific libraries\nimport numpy as np\nimport scipy\n\n# import Pandas\n\nimport pandas as pd\n\n# Graphic libraries\n\nimport matplotlib as plt\n%matplotlib inline\nimport seaborn as sns\nfrom plotly.offline import init_notebook_mode, iplot, download_plotlyjs\ninit_notebook_mode()\nimport plotly.graph_objs as go\n\n# Extra options \n\npd.options.display.max_rows = 10\npd.set_option('max_columns', 50)\nsns.set(style='ticks', context='talk')\n\n# Creating alias for magic commands\n%alias_magic t time");
      }
    }
    return {
        load_ipython_extension: load_ipython_extension
    };
});
Run Code Online (Sandbox Code Playgroud)

.yaml必须采用以下格式:

Type: IPython Notebook Extension
Compatibility: 3.x, 4.x
Name: Default cells
Main: main.js
Link: README.md
Description: |
  Add a default cell for each new notebook. Useful when you import always the same libraries$


Parameters:
- none
Run Code Online (Sandbox Code Playgroud)

和README.md

default_cells
=========

Add default cells to each new notebook. You have to modify this line in the main.js file to change your default cell. For example

`Jupyter.notebook.insert_cell_above('code', 0).set_text("import numpy as np/nimportpandas as pd")`


You can also add another default cell by creating a new line just below :

`Jupyter.notebook.insert_cell_above('code', 1).set_text("from sklearn.meatrics import mean_squared_error")`

**Don't forget to increment 1 if you want more than one extra cell. **
Run Code Online (Sandbox Code Playgroud)

然后,您只需在Jupyter中出现的新标签“ nbextensions”中启用“默认单元格”扩展名即可。

唯一的问题是,它可以通过查看笔记本中的单元数来检测笔记本是否为新笔记本。但是,如果您在一个单元格中编写了所有代码,它将把它检测为新笔记本,并且仍会添加默认单元格。

  • 这是完美的答案!不敢相信这个扩展仍然没有开箱即用。 (2认同)

小智 5

另一半解决方案:将默认代码保存在文件中,然后%load在第一个单元格中手动键入并执行命令。

我将标准导入文件保存在firstcell.py中:

%reload_ext autoreload
%autoreload 2

import numpy as np
import pandas as pd
... 
Run Code Online (Sandbox Code Playgroud)

然后在每个新笔记本中,我%load firstcell.py在第一个单元格中键入并运行,jupyter将第一个单元格内容更改为

# %load firstcell.py
%reload_ext autoreload
%autoreload 2

import numpy as np
import pandas as pd

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
Run Code Online (Sandbox Code Playgroud)

如果您确实只想要一个import语句,那么您什么都不会得到,但是如果您有多个始终要使用的语句,这可能会有所帮助。


jrj*_*rjc 2

去那里:

~/.ipython/profile_default/startup/
Run Code Online (Sandbox Code Playgroud)

您可以阅读自述文件:

这是IPython的启动目录

每当加载此配置文件时,此目录中的 .py 和 .ipy 文件将在通过 exec_lines 或 exec_files 配置指定的任何代码或文件之前运行。

文件将按字典顺序运行,因此您可以使用前缀控制文件的执行顺序,例如::

00-first.py
50-middle.py
99-last.ipy
Run Code Online (Sandbox Code Playgroud)

所以你只需要在那里创建一个文件,00_imports.py其中包含:

import numpy as np
Run Code Online (Sandbox Code Playgroud)

如果你想添加像%matplotlib inlineuse这样的东西.ipy,你也可以直接使用。

或者,似乎存在另一种解决方案notebook extension,但我不知道它是如何工作的,请参阅此处了解该主题的github问题: https: //github.com/jupyter/notebook/issues/640

华泰