在 cron 中启动时找不到 Python 模块

L. *_*ros 7 python scripts cron 18.04

我正在运行一个小 ubuntu 服务器(版本 18.04)

在升级到 18.04 之前,cron 执行得很好。

这是我的 crontab ( sudo crontab -e) :

*/5  *    * * *  PYTHONPATH=/usr/bin/python3 /usr/bin/python3 /home/louis/backup-server/main.py >> /var/log/MYbackup.log 2>&1
Run Code Online (Sandbox Code Playgroud)

但是当 cron 启动时,会记录以下内容:

Traceback (most recent call last):
  File "/home/louis/backup-server/main.py", line 7, in <module>
    import config.config as config
  File "/home/louis/python_helpers/config/config.py", line 2, in <module>
    from dotenv import load_dotenv
ModuleNotFoundError: No module named 'dotenv'
Run Code Online (Sandbox Code Playgroud)

但是,如果我运行sudo python3 /home/louis/backup-server/main.py脚本正确执行

我确实跑了 sudo pip install python-dotenv

脚本内容:

# /home/louis/backup-server/main.py
# permissions : -rwxr-xr-x
import os
import requests
import json
import datetime
import sys
sys.path.insert(0, '/home/louis/python_helpers')
import config.config as config
import mail
import utils

def main():
    # some code

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

——

# /home/louis/python_helpers/config/config.py
# permissions : -rwxr-xr-x 
import os
from dotenv import load_dotenv
dotenv_path = os.path.join(os.path.dirname(__file__), '.env')
load_dotenv(dotenv_path)
# some config var
Run Code Online (Sandbox Code Playgroud)

我确实有一个__init__.py文件/home/louis/python_helpers/config,如果我应该添加任何其他信息,请告诉我。

最让我感到困扰的是,如果手动启动,脚本运行得很好,但不像 cron 那样运行。

编辑:我不确定这个问题是属于这里还是在 stackoverflow 上,所以请告诉我是否应该移动它(即使我不知道除了创建一个新问题之外如何)

L. *_*ros 7

好吧,这个问题非常愚蠢,我确实运行了pip install python-dotenv并且sudo pip install python-dotenv(脚本需要 root 权限才能访问某个文件夹)但我没有运行sudo -H pip install python-dotenv.

运行此命令后,cron 执行得很好。

  • 同样在这里。`pip3 uninstall &lt;packages&gt;` 后跟 `sudo -H pip3 install &lt;packages&gt;` 使 cronjob 对我来说运行良好。但我现在想知道是否应该尝试虚拟环境来完全避免这个问题。 (5认同)