我正在尝试在crontab中设置Python脚本。我有以下内容:
0-59 * * * * python ~/PycharmProjects/dailySearch.py trees >> ~/woah.log 2>&1
在我的日志文件中,我得到ImportError: No module named requests
。我搜寻了其他SO问题并尝试了各种建议,但均未成功。
当我在IDLE中运行脚本时,sys.version
将版本显示为3.7.1 (default, Dec 14 2018, 13:28:58)
我已经安装了两个Python版本,尽管我正在运行python3(3.7.1),但是我不确定我是否已经将请求和pip安装在应该安装的位置
python3位于:/Users/jaai/anaconda3/bin/python3
pip3:/Users/jaai/anaconda3/bin/pip3
为确认我正在使用pip3安装请求,我使用以下命令运行了sudo pip3 install requests
:
Requirement already satisfied: requests in /Users/jaai/anaconda3/lib/python3.7/site-packages (2.22.0)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /Users/jaai/anaconda3/lib/python3.7/site-packages (from requests) (1.24.1)
Requirement already satisfied: certifi>=2017.4.17 in /Users/jaai/anaconda3/lib/python3.7/site-packages (from requests) (2018.11.29)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /Users/jaai/anaconda3/lib/python3.7/site-packages (from requests) (3.0.4)
Requirement already satisfied: idna<2.9,>=2.5 in /Users/jaai/anaconda3/lib/python3.7/site-packages (from requests) (2.8)
感谢您的帮助!
答案 0 :(得分:1)
可能有几件事是罪魁祸首,但是只是为了确保您运行的解释器与cron正在使用相同,请确保您包括python3的完整路径,即
0-59 * * * * /Users/jaai/anaconda3/bin/python3/python ~/PycharmProjects/dailySearch.py trees >> ~/woah.log 2>&1
如果问题仍然存在,那么也许您应该考虑为cron设置PYTHONPATH环境变量,以使其与您的shell设置相匹配。
答案 1 :(得分:0)
我在Ubuntu 18.04上遇到了同样的问题,在crontab中使用显式路径不起作用。出于某种原因,cron无法正常工作,而我的帐户中的sudo可以正常工作。我本来以为它们会是一样的,但是可惜不是。我得出的结论是,这是一个环境变量问题。
对我来说,解决方法是让crontab调用Shell脚本,然后执行python脚本。还必须设置 HOME 和 PYTHONPATH 环境变量:
crontab:
# Execute shell script and pipe stdout and stderr to a log file
# Which will enable you to see what's going on
* * * * * <your_path>/yourscript.sh >> <your_path>yourscript_cron.log 2>&1
yourscript.sh:
#!/bin/bash
echo yourscript.sh called: `date`
HOME=<your_home_dir>
PYTHONPATH=<path_to_dist_packages>
cd <path_to_your_python_script>
<python_executable> ./<your_python_script> 2>&1 1>/dev/null
有趣的是,这种外壳包装方法是我过去在Windows上执行预定任务的方式,因为它为您提供了最佳的调试和灵活性。
希望这对其他人有帮助。