使用python调度cronjob找不到模块bs4
我写了一个脚本来抓取一些我希望每10分钟运行一次的web数据。当我从命令行执行该脚本时,它运行良好,但当我尝试每10分钟使用cronjob运行它时,会出现错误,因为它无法导入bs4'。我得到这个错误:使用python调度cronjob找不到模块bs4,python,cron,beautifulsoup,Python,Cron,Beautifulsoup,我写了一个脚本来抓取一些我希望每10分钟运行一次的web数据。当我从命令行执行该脚本时,它运行良好,但当我尝试每10分钟使用cronjob运行它时,会出现错误,因为它无法导入bs4'。我得到这个错误: No module named bs4 我的crontab: */10 * * * * PYTHONPATH=/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages python /Users/{
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
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
消息Id:
日期:2017年12月23日星期六13:40:00-0600(CST)
回溯(最近一次呼叫最后一次):
文件“/Users/{username}/Documents/scripts/cot.py”,第3行,在
从bs4导入BeautifulSoup
ImportError:没有名为bs4的模块
也有同样的问题。在我的例子中,作业是由root用户执行的,而不是在用户模式下执行的。确保在用户模式下执行cronjob。正确的解决方案得到了回答我对bs4和python也有同样的问题
我最终解决了这个问题,创建了一个shell脚本(使用chmod+x使其可执行),然后从命令行(/scraper.sh
)执行该脚本
bs4已安装,但它抛出了一个错误,因此我使用--user标志(pip3 install bs4--user
)使用pip再次下载了它,并且工作正常
然后我将crontab设置为运行shell脚本(我认为作为shell脚本运行它会保留python或conda需要的一些环境变量,请阅读另一个问题)
希望这有帮助 为什么不在cron instaed中运行.py
python/route/to/script.py
我想我就是这么做的。你能详细说明一下吗?我是说,你有没有试过只使用python
而不使用完整路径来运行它?如果它在命令行中工作,那么它应该在@cron中工作。另外,您没有在virtualenv中安装BeautifulSoup
,对吗?是的,我可以使用python在终端中运行它,然后使用路径。不在virtualenv.printsys.path
中,查看python
使用哪些路径查找模块-即导入sys;打印('\n'.join(sys.path))