从cronjob运行时,Python找不到自定义安装的模块

从cronjob运行时,Python找不到自定义安装的模块,python,linux,python-3.x,cron,pip,Python,Linux,Python 3.x,Cron,Pip,我试图使用cronjob将python脚本设置为每两分钟运行一次,crontab行如下。python脚本由下面发布的shell脚本script.sh调用。此python脚本启动selenium webdriver,收集一些数据并将其保存到csv文件中。下面还有一个片段 克朗塔布 */2 * * * * export DISPLAY=:0 && /home/me/workspace/project/script.sh > /home/me/workspace/proj

我试图使用cronjob将python脚本设置为每两分钟运行一次,crontab行如下。python脚本由下面发布的shell脚本script.sh调用。此python脚本启动selenium webdriver,收集一些数据并将其保存到csv文件中。下面还有一个片段

克朗塔布

    */2 * * * * export DISPLAY=:0 && /home/me/workspace/project/script.sh > /home/me/workspace/project/cron.log 2>&1
在cronjob中运行selenium需要export DISPLAY=:0,如图所示。 此位>/home/me/workspace/project/cron.log 2>&1将输出和错误记录到cron.log文件中

script.sh

    #!/bin/bash
    python3 /home/me/workspace/project/foo.py
福比

    from datetime import datetime
    from selenium import webdriver
    from pyvirtualdisplay import Display

    display = Display(visible=0, size=(800, 600))
    display.start()
    with webdriver.Chrome() as driver:
        #do some scraping and save to csv
        pass
当我手动运行script.sh时,一切运行顺利,没有错误。但是当我设置crontab时,脚本失败了。cron.log文件显示:

    Traceback (most recent call last):
    File "/home/me/workspace/project/foo.py", line 7, in <module>
        from selenium import webdriver
    ImportError: No module named 'selenium'
这表明selenium已按预期安装,因为脚本在手动启动时运行良好。如果我注释掉selenium行,另一个库pyvirtualdisplay也会发生同样的情况。因此,问题在于,出于某种原因,python在通过cronjob运行时找不到自定义安装的模块。我已经尝试过用'/usr/bin/env python3'或'/usr/bin/python3'和它的其他变体来替换'python3',但没有成功

如果有人能给出解决方案的提示,我将不胜感激,谢谢

#!/bin/bash
python3 /home/me/workspace/project/foo.py
我想这是你的问题@Martijn Pieters说这是一个路径问题,他说得很对。您需要确保所调用的“python3”是安装了selenium的python3。无论您在哪里执行pip3冻结,都需要确保cron看到的就是这个

当我使用cronjobs时,我让我的anaconda virtualenv显式运行该作业,如下所示:

/home/username/anaconda/envs/python3/bin/python /home/me/workspace/project/foo.py

尝试将当前的$PATH值放在crontab的开头,即

PATH=/usr/local/bin:/usr/local/sbin......whatever echo $PATH outputs.....
* * * * * crontasks

默认情况下,cron不尊重.bashrc/.bash_profille和其他一些东西。

您运行的是不同的python3二进制文件,这意味着您的PATH环境变量在shell环境和cron环境之间不同,或者PYTHONPATH变量不同,并且pip3将库安装在用户特定的位置。首先检查两个环境之间的sys.executable是否相同,如果不相同,请检查您的路径以查看不同之处,然后检查sys.PATH并修复PYTHONPATH设置。我的响应已经很晚了,但virtualenv方法起到了作用。谢谢
PATH=/usr/local/bin:/usr/local/sbin......whatever echo $PATH outputs.....
* * * * * crontasks