【问题标题】:How to run a Jupyter notebook with Python code automatically on a daily basis?如何每天自动运行带有 Python 代码的 Jupyter Notebook?
【发布时间】:2018-07-22 20:01:28
【问题描述】:

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

【问题讨论】:

  • 您不能将笔记本转换为 Python 文件并定期运行吗?一定要放在笔记本里吗?另一个重要的问题是代码应该做什么?
  • 只需将其放入常规的.py 文件中,然后在需要时运行内置的调度程序类型程序(即 Windows 任务调度程序)。
  • 我需要按原样运行,因为它调用了几个笔记本,所以它基本上是更大引擎的马达
  • 如果你真的想这样做,看看 Jupyter 的 Execute API:nbconvert.readthedocs.io/en/latest/…。您可以在命令行中运行 Jupyter 笔记本,并且可以将其与调度程序或自动化脚本结合使用,以运行您需要的内容以及运行频率。
  • @rayryeng 有一个很好的解决方案。找出运行它所需的命令,将其粘贴在批处理文件中,然后从调度程序调用批处理文件。

标签: python jupyter-notebook scheduled-tasks papermill


【解决方案1】:

更新
最近我遇到了用于执行和参数化笔记本的 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 之外,您还有更多选择。我喜欢这个选项,因为你有一个完全可执行的“日志”文件。

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

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

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

【讨论】:

    【解决方案2】:

    如果您想要更高的质量,最好与气流结合。 我将它们打包在一个 docker 镜像中,https://github.com/michaelchanwahyan/datalab。

    它是通过修改一个开源包nbparameterize并集成传递的参数来完成的,例如execution_date。 可以动态生成图表输出可以更新并保存在笔记本内。

    什么时候执行

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

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

    【讨论】:

    • 安全性怎么样?
    【解决方案3】:

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

    这是demo video,上面的 Chrome 网上应用店链接中还有更多信息。

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

    【讨论】:

    【解决方案4】:

    你可以在cronjob中添加jupyter notebook

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

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

    【讨论】:

      【解决方案5】:

      使用Papermill 可以方便地执行带参数的 Jupyter 笔记本。我还发现以 Markdown 文件或带有Jupytext 的 Python 脚本的形式共享/版本控制笔记本很方便。然后我将笔记本转换为带有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 Notebooks 自动生成报告(使用Jupytext 和 Papermill) 您可以在 Medium、GitHub 或 Binder 上阅读。如果您想以交互方式测试文章中命令的结果,请使用 Binder 链接。

      【讨论】:

        【解决方案6】:

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

        如果您想处理多个相互依赖的笔记本的工作流程,您可以尝试Airflow's integration with papermill。如果您正在寻找不需要调度程序来运行的更简单的东西,您可以尝试ploomber,它还与 papermill 集成(免责声明:我是作者)。

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

            手动运行你的笔记本:

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

            创建一个简单的批处理文件并将上面的命令添加到文件中:

            /home/username/scripts/mynotebook.sh
            

            将上面的命令粘贴到文件中

            使文件可执行

            chmod +x /home/username/scripts/mynotebook.sh
            

            要安排您的笔记本使用 cron 或气流,取决于您的需求与复杂性。如果你想使用 cron,你可以简单地执行 crontab -e 并添加一个条目

            00 11 * * * /home/username/scripts/mynotebook.sh
            

            【讨论】:

              【解决方案9】:

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

              【讨论】:

                猜你喜欢
                • 2018-09-15
                • 2020-06-23
                • 2021-05-28
                • 2021-08-17
                • 2020-10-23
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多