使用python调度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/{

我写了一个脚本来抓取一些我希望每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/{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.print
sys.path
中,查看python
使用哪些路径查找模块-即导入sys;打印('\n'.join(sys.path))