如何 运行 一个 Jupyter notebook 每天自动写 Python 代码?

How to run a Jupyter notebook with Python code automatically on a daily basis?

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

更新
最近我遇到了用于执行和参数化笔记本的 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 notebook,这个嵌入到 cronjob 中会做你想做的事。

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,你还有更多选择。我喜欢这个选项,因为你之后有一个完全可执行的 "log"-File。

我建议对您的笔记本 运行 使用虚拟环境,以避免将来的更新弄乱您的脚本。不要忘记将 nbconvert 安装到环境中。

现在创建一个 cronjob,每天 运行s 例如在 5:10 AM,在您的终端中输入 crontab -e 并添加此行:

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

如果你想要更高的质量,最好结合airflow。 我将它们打包成 docker 图像,https://github.com/michaelchanwahyan/datalab

通过修改一个开源包nbparameterize,并整合execution_date等传参实现。 图表可以即时生成输出可以更新并保存在笔记本中。

执行时

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

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

你可以在cronjob中添加jupyter notebook

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

你必须将 /home/ec2-user/anaconda3 替换为你的 anaconda 安装位置,你可以根据你的要求在 cron 中安排时间

试试 SeekWell Chrome Extension。它允许您直接从 Jupyter Notebooks 将笔记本安排为 运行 每周、每天、每小时或每 5 分钟。如果愿意,您也可以将 DataFrames 直接发送到 Sheets 或 Slack。

这是一个 demo video,在上面的 Chrome 网上商店 link 中也有更多信息。

**披露:我是 SeekWell 的联合创始人

使用 Papermill. I also find convenient to share/version control the notebook either as a Markdown file or a Python script with Jupytext 可以方便地使用参数执行 Jupyter 笔记本。然后我用 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环境,以及如何在笔记本上使用持续集成,看看我的文章使用 Jupyter 笔记本(使用 Jupytext 和 Papermill)自动生成报告,您可以在 Medium, GitHub, or on Binder 上阅读。如果您想以交互方式测试文章中命令的结果,请使用 Binder link。

正如其他人所提到的,造纸厂是必经之路。 Papermill 只是 nbconvert 具有一些额外的功能。

如果您想处理多个相互依赖的笔记本的工作流程,您可以尝试 Airflow's integration with papermill. If you are looking for something simpler that does not need a scheduler to run, you can try ploomber,它也与 papermill 集成(免责声明:我是作者)。

您想使用当前在 EAP 中的 Google AI Platform Notebooks 调度程序服务。

您可以下载.py形式的notebook,然后创建一个批处理文件来执行.py脚本。然后在任务调度器中调度批处理文件

手动运行你的笔记本:

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

创建一个 BAT 文件,然后 运行 它通过任务计划程序为我工作。下面是代码。

call C:\Users\...user...\Anaconda3\condabin\conda activate
python -m notebook_file.py
pause
call conda deactivate