背景
mac crontab 调用 python 时出现 ImportError: No module named XXX 的问题
把这个脚本加入 crontab 里进行时刻监控,于是 #crontab -e,添加语句
nohup python proxyIp.py >./proxy.log &
但是在 shell 里单独执行是 OK 的,于是添加了 source /etc/profile 还是报错,可见不是环境变量的问题,怎么办?
source /etc/profile && nohup /usr/bin/python proxyIp.py >./proxy.log &
首先,#which python,确定 python 的路径:
如果一台机器上装有多个版本的 python,更是要指明 python 的路径,不然 crontab 就会笨笨的去找默认路径。
小结
如果出现 ImportError: No module named XXX 问题
可能原因:
1、没安装对应的 moduel 模块。
2、系统存在多个 pip 版本,安装 module 模块的时候要使用要用的 pip 那个版本去安装。
3、系统存在多个 python 版本,调用 python 命令的时候,最好明确是哪个版本的 python 执行器。
4、有时候代码在本地 mac 执行 ok,而放到了服务器上,在调用自己写的其他模块代码时候,如果出现上面这个错误,只需要在文件头写 sys.path.append('/home/PerfEngine'),显式声明工程的路径即可。
Ps:
归根到底就是 python 很蠢的,这个问题就是路径问题。
import sys
print(sys.path) # 查看当前路径
from os import path
d = os.path.dirname(file) # 获取当前路径
parent_path = os.path.dirname(d) # 获取上一级路径
sys.path.append(parent_path) # 如果要导入到包在上一级