Install jupytext with pip install jupytext --upgrade
.
Start jupyter lab with jupyter lab
,
jupyter will rebuild with this new extension.
After compiling complete, in the browser you can see Build complete
,
clik Reload button.
In the Extension manager at the left side in the browser window, click Enable to enable Jupyter lab extensions. In the Commands panel input pair notebook with light script and run it. Now the current notebook is binding with a .py file with the same name. You can edit the .py file, save it and refresh the notebook in browser to see the effects.
Work flow
由于 Jupyter notebook 无法进行版本对比 (git diff
),
它的 .ipynb 文件不进入版本控制系统。
只对基于 Jupytext 格式的 Python script (.py) 文件做版本控制,
用 jupytext 生成 notebook 文件上传 Kaggle.
当脚本中包含 %time
之类的 IPython magic 时,
使用 python
无法正常运行 .py 脚本,例如运行下面的脚本:
# %time aa = 3
bb = aa + 4
会报 aa
未定义错误。
解决方法是用 jupytext --to notebook --execute house_price.py
代替 python house_price.py
,然后在 jupyter 服务中打开 notebook 查看结果。
Develop in terminal
在 vim 里按照下面的转换规则编写 Python script,用 IPython Console 观察效果, 包括文字和图形输出,运行通过后使用转换命令生成 notebook 文件 (见 Batch conversion 一节)。
使用这种方式需要关闭 notebook 的 autosave 功能,以避免 notebook 和 script 同时修改发生冲突,关闭方法是在代码中添加:
# %autosave 0
Develop in Jupyter lab
在 Jupyter lab 里开发,窗口分为 notebook 编辑器和 console, 完成 notebook 文件后,再用 jupytext 转为 .py 文件。 这样生成的 .py 文件可读性无法保证,所以不推荐这种模式,
Batch Conversion
.ipynb to .py: jupytext --to py house_price.ipynb
.py to .ipynb: jupytext --to notebook --execute house_price.py
Writing Rules for Python Scripts
-
连续的代码/文字(中间没有空行)会被放到 notebook 的同一个 cell 里, 如果希望在一个 markdown cell 里插入空行,参考下面的示例
-
如果希望将包含空行的代码放到一个 cell 里,用
# +
和#-
包裹(不推荐) -
展示性代码(比如
df.shape
,df.head()
,df.info()
)需要放到单独的单元格里, 否则 notebook 中此单元格的输出只包含最后一行代码的运行结果 -
Add markdown with
# ...
, for example# # Title 1
-
Add IPython magic with
#
, for example:%autosave 0
多行 Markdown 代码块示例
# ### Fix LASSO convergence warning
#
# ConvergenceWarning: Objective did not converge.
# You might want to increase the number of iterations.
# Run `>>> Lasso?` for details.
#
# Solution: Set max iteration number to 10000.
# Note that give a small tolerance has no effect on this issue
#
# Ref: https://stackoverflow.com/questions/20681864/lasso-on-sklearn-does-not-converge