如何每天自动运行带有Python代码的Jupyter笔记本?

41

我有一些Python代码在Jupyter笔记本中,我需要每天自动运行它,所以我想知道是否有设置的方法。非常感谢任何关于此的建议。


2
你不能将笔记本转换为Python文件并定期运行吗?它一定要包含在笔记本中吗?另一个重要的问题是代码应该做什么? - rayryeng
2
只需将它放入常规的.py文件中,然后使用内置计划程序(例如Windows任务计划程序)在需要时运行即可。 - SuperStew
我需要按原样运行,因为它调用了几个笔记本,所以基本上是更大引擎的马达。 - Betsy Curbelo
4
如果你真的想以这种方式做,可以看看Jupyter的Execute API文档:http://nbconvert.readthedocs.io/en/latest/execute_api.html#executing-notebooks-from-the-command-line。你可以在命令行中运行Jupyter笔记本,并将其与调度程序或自动化脚本结合使用,以按需定期运行所需的内容。 - rayryeng
3
@rayryeng提供了一个不错的解决方案。找出运行它所需的命令,将其放入批处理文件中,然后从调度程序中调用该批处理文件即可。 - SuperStew
显示剩余6条评论
12个回答

36
更新
最近我发现了一个名为 Papermill 的工具,用于执行和参数化笔记本。

https://github.com/nteract/papermill

papermill local/input.ipynb s3://bkt/output.ipynb -p alpha 0.6 -p l1_ratio 0.1

这似乎比nbconvert更好,因为您可以使用参数。您仍然需要使用调度程序触发此命令。以下是在Ubuntu上使用cron的示例。


旧答案

nbconvert --execute

可以执行jupyter笔记本,将其嵌入到cron作业中即可实现您想要的功能。

在Ubuntu上的示例设置:

创建yourscript.sh并包含以下内容:

/opt/anaconda/envs/yourenv/bin/jupyter nbconvert \
                      --execute \
                      --to notebook /path/to/yournotebook.ipynb \
                      --output /path/to/yournotebook-output.ipynb

除了--to notebook之外,您还有更多选项。我喜欢这个选项,因为您之后可以拥有一个完全可执行的“日志”文件。

我建议使用虚拟环境来运行您的笔记本电脑,以避免未来的更新对您的脚本造成影响。不要忘记将nbconvert安装到环境中。

现在在终端中输入crontab -e并添加以下行,创建一个cronjob,每天例如在早上5:10运行:

10 5 * * * /path/to/yourscript.sh

5

试用 SeekWell Chrome浏览器扩展程序。该工具允许您从Jupyter Notebooks中设置笔记本的每周、每日、每小时或每5分钟运行计划。如果需要,您也可以将数据帧(DatFrames)直接发送到Sheets或Slack。

这里有一个演示视频,更多信息请查看上面的Chrome Web Store链接。

**声明: 我是SeekWell的联合创始人。


1
目前,Starter计划每月收费50美元:https://www.seekwell.io/pricing - Awais Mirza

4

如果您想获得更高的质量,最好结合airflow使用。我把它们打包成了一个docker镜像,https://github.com/michaelchanwahyan/datalab

这是通过修改开源包nbparameterize并集成传递参数(如execution_date)来完成的。可以实时生成图形,输出可以在笔记本内更新和保存。

执行时:

  • 将读取笔记本并注入参数
  • 笔记本将被执行,输出将覆盖原路径

此外,还安装和配置了常用工具,如spark,keras,tensorflow等。


安全问题怎么样? - Chique_Code

2

您可以在cronjob中添加Jupyter Notebook

0 * * * * /home/ec2-user/anaconda3/bin/python /home/ec2-user/anaconda3/bin/jupyter-notebook

您需要将/home/ec2-user/anaconda3替换为您的Anaconda安装位置,并且可以根据您的需求在cron中安排时间。


2

使用Papermill方便地执行带参数的Jupyter笔记本。我还发现将笔记本作为Markdown文件或Python脚本共享/版本控制非常方便,可以使用Jupytext完成。然后,我使用nbconvert将笔记本转换为HTML文件。通常我的工作流程如下:

cat world_facts.md \
| jupytext --from md --to ipynb --set-kernel - \
| papermill -p year 2017 \
| jupyter nbconvert --no-input --stdin --output world_facts_2017_report.html

了解以上内容,包括如何指定期望运行笔记本的Python环境以及如何在笔记本上使用持续集成,请查看我的文章Automated reports with Jupyter Notebooks (using Jupytext and Papermill)。您可以在MediumGitHubBinder上阅读该文章。如果您想要交互式地测试文章中的命令结果,请使用Binder链接。

2

手动运行笔记本的方法:

jupyter nbconvert --to notebook --execute /home/username/scripts/mynotebook.ipynb

创建一个简单的批处理文件并将上述命令添加到文件中:
/home/username/scripts/mynotebook.sh

将上面的命令粘贴到文件中 使该文件可执行
chmod +x /home/username/scripts/mynotebook.sh

要安排笔记本电脑的使用,可以根据您的需求和复杂程度选择 cron 或 airflow。如果您想使用 cron,只需执行 crontab -e 并添加一个条目即可。
00 11 * * * /home/username/scripts/mynotebook.sh

2
正如其他人所提到的,使用papermill是可行的方法。Papermill只是带有一些额外功能的nbconvert。
如果您想处理多个相互依赖的笔记本工作流程,可以尝试Airflow与papermill的集成。如果您正在寻找不需要调度程序运行的更简单的东西,可以尝试ploomber,它也与papermill集成(免责声明:我是作者)。

2

根据文章,有几种方法可以每天执行Jupyter Notebook。

Cron或Windows任务计划程序

您可以使用操作系统调度程序来执行笔记本电脑。 有两个命令行工具可用于执行笔记本电脑:

两者都很好,我个人使用nbconvert,但papermill提供了一些扩展作为笔记本电脑的输入参数或自动导出到云存储。

Mercury

开源框架 Mercury是一个基于Web的应用程序,它:

  • 可以在后台执行笔记本电脑,
  • 可以将笔记本共享为网站,
  • 可以将笔记本作为带有PDF或HTML附件的电子邮件发送以执行,
  • 可以将笔记本访问权限限制为经过身份验证的用户。

Web应用程序中可用的笔记本

list of notebooks in Mercury

预定笔记本

通过电子邮件发送的PDF笔记本

example pdf notebook sent in email

Notebooker

Notebooker 是一个开源的网络应用程序,用于安排和共享笔记本。

笔记本列表

list of notebooks

已执行的笔记本

notebooker executed notebook


0
创建一个BAT文件,然后通过任务计划程序运行它对我很有用。以下是代码。
call C:\Users\...user...\Anaconda3\condabin\conda activate
python -m notebook_file.py
pause
call conda deactivate 

0

您可以以 .py 的形式下载笔记本,然后创建一个批处理文件来执行 .py 脚本。接着在任务计划程序中安排批处理文件的计划。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接