【问题标题】:Python Shebang Doesn't Work #!/usr/local/bin/pythonPython Shebang 不起作用 #!/usr/local/bin/python
【发布时间】: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 中的解释器。

标签: python shell shebang


【解决方案1】:

这很可能是您的环境变量的问题。很可能您的 PATHPYTHONPATH 变量中有不同的条目。

要查看差异,您可以将脚本设置为 bash 脚本,并让它回显 env 的输出,并将其与 shell 的 env 进行比较。

【讨论】:

    猜你喜欢
    • 2018-01-15
    • 1970-01-01
    • 2016-09-28
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    • 2015-02-03
    • 2013-04-22
    相关资源
    最近更新 更多