cron.hourly无法导入Python模块

2 投票
1 回答
582 浏览
提问于 2025-04-17 18:12

我有一个叫 foo 的程序,它是通过 cron.hourly 这个定时任务来运行的。我已经给它设置了可执行权限(chmod +x),运行起来没问题。我的问题是,它无法识别 Python 模块,无法导入。

我有一个文件夹 ~/Foo/src,里面有我把原始 Python 代码变成可执行文件的代码(main),还有我想导入的另一个模块(foobar)。我在里面放了一个空的 init.py 文件,这个文件应该可以让这两个模块被导入。实际上,当我用下面的命令运行我的脚本时:

python src/main.py

一切都正常,我没有遇到这个错误。但是当我运行:

run-parts -v /etc/cron.hourly/main

我就会收到一个错误,内容如下:

ImportError: No module named foobar
run-parts: /etc/cron.hourly//main exited with return code 1

我导入 foobar 的方式是:

os.chdir("/home/ubuntu/Foo/src/")
import foobar

再次强调,这在用 Python 运行时是可以的,但在运行我的可执行文件时却不行。这是为什么呢?我该怎么改才能避免这个问题?

1 个回答

0
import sys
sys.path.append("/home/ubuntu/Foo/src")

import foobar

根据文档:

sys.path

这是一个字符串列表,用来指定查找模块的路径。它的初始值来自环境变量 PYTHONPATH,还有一个根据安装情况决定的默认值。

在程序启动时,这个列表的第一个项目,path[0],是包含用来启动 Python 解释器的脚本的目录。如果脚本目录不可用(比如说,解释器是以交互方式启动的,或者脚本是从标准输入读取的),那么 path[0] 就是一个空字符串,这样 Python 会优先在当前目录中查找模块。需要注意的是,脚本目录会被放在 PYTHONPATH 生成的条目之前。

程序可以自由地修改这个列表,以满足自己的需求。

撰写回答