【发布时间】:2019-01-20 19:32:39
【问题描述】:
我正在尝试使用 Crontab 来安排运行主要 python 脚本的 shell 脚本。我曾尝试将 shebang #!/usr/local/bin/python 放在 python 脚本的第一行,但它因“无法导入某些包”而出错。但是,如果我通过/usr/local/bin/python python_script.py 在shell 脚本中调用python 脚本,它就起作用了。有什么想法为什么我不能直接在 python 中使用 shebang #!/usr/local/bin/python 而不是上面提到的在 shell 中调用的方式(它不优雅)?
【问题讨论】:
-
提供错误消息而不是仅仅说“它出错了”会很有帮助。听起来您没有在脚本上设置执行位。
-
如果你从 cron 以 root 身份运行,你可能会得到不同的包(假设是用户本地包)。
-
要么 pip install all deps as root,要么——更好——创建一个虚拟环境,在那里安装你需要的所有东西,然后从虚拟环境的 bin 目录中使用解释器调用你的脚本。例如。 /path/to/venv/bin/python.
-
由 crond 启动的 shell 可能与您作为用户的环境变量不同。我第二个@randomir。
-
@lovechillcool,不。除非您创建了一个以
/usr/local为根的虚拟环境——这是极不可能的。如果您的虚拟环境植根于/home/user/project/env,则使用/home/user/project/env/bin/python作为 hashbang 中的解释器。