使用Cronjob运行Papermill报错:papermill为目录无法找到可执行文件路径
问题原因说明
你当前的报错是因为
pip show papermill返回的路径是Python库的安装目录,并非可执行文件路径,你填入的路径指向了papermill库的文件夹,因此触发papermill is a directory的错误。
第一步:获取终端调用的papermill可执行文件路径
直接在终端执行以下命令即可得到你平时直接调用的papermill可执行文件的绝对路径:
which papermill
执行后会返回类似/usr/local/bin/papermill、/Users/你的用户名/opt/anaconda3/bin/papermill的结果,这个就是你需要的可执行文件路径。
第二步:调整crontab配置的可用方案
方案1:直接填写可执行文件绝对路径(推荐,稳定性最高)
把你原来crontab命令里的/path-to-papermill/papermill替换成上一步which papermill返回的完整路径即可,调整后示例如下(注意整行不要换行):
0 * * * * /Users/你的用户名/opt/anaconda3/bin/papermill /Users/username/path-to-code/notebook.ipynb /Users/username/path-to-code/output_notebook.ipynb > /tmp/stdout.log 2> /tmp/stderr.log
方案2:在crontab中声明PATH变量
crontab默认的PATH环境变量和你终端登录时的PATH不一致,因此也可以通过提前声明PATH的方式避免写全路径:
- 先在终端执行
echo $PATH,复制输出的完整内容 - 打开crontab编辑界面,在所有定时任务的最上方新增一行,把复制的PATH内容粘贴进去,示例:
PATH=/usr/local/bin:/usr/bin:/bin:/Users/你的用户名/opt/anaconda3/bin 0 * * * * papermill /Users/username/path-to-code/notebook.ipynb /Users/username/path-to-code/output_notebook.ipynb > /tmp/stdout.log 2> /tmp/stderr.log
备选方案:通过Python模块调用
如果上述方案都有问题,也可以直接调用Python解释器执行papermill模块,先执行which python获取你常用的Python解释器全路径,再按如下格式写crontab:
0 * * * * /Users/你的用户名/opt/anaconda3/bin/python -m papermill /Users/username/path-to-code/notebook.ipynb /Users/username/path-to-code/output_notebook.ipynb > /tmp/stdout.log 2> /tmp/stderr.log
内容的提问来源于stack exchange,提问作者megansorel
相关产品推荐
相关产品推荐

