Dem*_*ann 11 python jupyter jupyter-notebook
TI有没有办法在Jupyter笔记本中为特定的python内核配置默认的第一个单元?我同意默认的python导入违反了良好的编码习惯.
那么,我可以配置笔记本,以便新的python笔记本的第一个单元格始终
import numpy as np
Run Code Online (Sandbox Code Playgroud)
例如?
如上所述创建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个文件:
我使用的代码来自: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”中启用“默认单元格”扩展名即可。
唯一的问题是,它可以通过查看笔记本中的单元数来检测笔记本是否为新笔记本。但是,如果您在一个单元格中编写了所有代码,它将把它检测为新笔记本,并且仍会添加默认单元格。
小智 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语句,那么您什么都不会得到,但是如果您有多个始终要使用的语句,这可能会有所帮助。
去那里:
~/.ipython/profile_default/startup/
Run Code Online (Sandbox Code Playgroud)
您可以阅读自述文件:
这是IPython的启动目录
每当加载此配置文件时,此目录中的 .py 和 .ipy 文件将在通过 exec_lines 或 exec_files 配置指定的任何代码或文件之前运行。
文件将按字典顺序运行,因此您可以使用前缀控制文件的执行顺序,例如::
Run Code Online (Sandbox Code Playgroud)00-first.py 50-middle.py 99-last.ipy
所以你只需要在那里创建一个文件,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
华泰
| 归档时间: |
|
| 查看次数: |
3678 次 |
| 最近记录: |