使用python调度cronjob无法找到模块bs4

时间:2017-12-23 19:56:46

标签: python cron beautifulsoup

我编写了一个脚本来抓取一些我希望每10分钟运行一次的网页数据。当我从命令行执行此操作时,脚本运行正常,但是当我尝试每10分钟使用一次cronjob运行它时会出现错误,因为它无法导入bs4'。我收到这个错误:

No module named bs4

我的crontab:

*/10 * * * * PYTHONPATH=/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages python /Users/{username}/Documents/scripts/cot.py

我通过使用此命令查找下载'bs4'的位置获得了PYTHONPATH变量:

python -c 'import bs4; print(bs4.__file__)'

输出/ var / {username} / mail:

X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME={username}>
X-Cron-Env: <USER={username}>
X-Cron-Env: <HOME=/Users/{username}>
Message-Id: <20171223194001.0783F8639E1@mbp-0500.localdomain>
Date: Sat, 23 Dec 2017 13:40:00 -0600 (CST)

Traceback (most recent call last):
  File "/Users/{username}/Documents/scripts/cot.py", line 3, in <module>
  from bs4 import BeautifulSoup
ImportError: No module named bs4

2 个答案:

答案 0 :(得分:0)

有同样的问题。就我而言,作业是由root执行的,而不是在用户模式下执行的。确保在用户模式下执行cronjob。正确的解决方案已得到回答 here

答案 1 :(得分:0)

我在bs4和python中遇到了相同的问题。

我最终通过以下方法解决了该问题:创建一个shell脚本(使其可以使用chmod +x执行),然后从命令行(./scraper.sh执行该脚本

bs4已安装,但抛出错误,因此我使用--user标志(pip3 install bs4 --user)用pip再次下载了它,并且工作正常。

然后,我将crontab设置为运行shell脚本(我认为将其作为shell脚本运行会保留python或conda所需的一些环境变量,请在其他问题中阅读)

希望这会有所帮助!