【问题标题】:python3 won't run from mac shell scriptpython3 不会从 mac shell 脚本运行
【发布时间】:2017-05-24 03:20:50
【问题描述】:

我正在尝试在 macOS 10.12 上使用 Automator 来启动 Python 3 脚本。当我使用以下命令从终端运行脚本时,该脚本运行良好:python3 my_script.py

Automator 有一个使用 /bin/bash shell 的“运行 Shell 脚本”功能。 shell 将使用以下命令运行脚本:python my_script.py,但这似乎只适用于用 Python 2.7 编写的脚本。

我的脚本以#!/usr/bin/env python3 开头,我认为这会将shell 引导到正确的python 解释器,但事实并非如此。

作为一种解决方法,如果我插入 python 解释器的完整路径:/Library/Frameworks/Python.framework/Versions/3.5/bin/python3,我可以让脚本运行,但我认为这是次优的,因为如果/当我更新到 Python 3.6 时,这些命令可能不起作用。

有没有更好的方法来指示 /bin/bash shell 运行 Python3 脚本?

【问题讨论】:

  • 您是否使脚本可执行?如果你运行 chmod +x my_script.py 你的脚本将是可执行的,那么你可以运行 ./my_script.py 而不需要 python3 my_script.py
  • 男人。我在 Mac 上是个傻瓜,但我建议你首先使用 Python 3.4。它是 Python 3 最稳定的版本。否则,您的“解决方法”是获取它的正确方法(路径的东西)。
  • 我跑了chmod +x,但没有帮助。权限为:-rwxr-xr-x.
  • 如果你运行which python3,它应该会告诉你shebang的正确路径。

标签: python macos shell automator


【解决方案1】:

既然你有 shebang 线,你可以做./my_script.py,它应该在 Python 3 上运行。

【讨论】:

  • 澄清为什么会这样:当您使用python my_script.py 运行脚本时,python 命令会显式覆盖shebang。运行脚本不指定要使用的解释器(例如,仅使用./my_script.py),操作系统会查看shebang以找出要使用的解释器。
  • 感谢您的建议。我在没有使用python 命令的情况下运行,现在得到错误:env: python3: No such file or directory,但这对我来说没有意义,因为在终端中运行which python3 时,我得到/Library/Frameworks/Python.framework/Versions/3.5/bin/python3。感谢您的帮助!
【解决方案2】:

您可以使用 brew install python3 通过 Homebrew 安装 Python 3,并使用 #!/usr/local/bin/python3 作为您的 shebang。

不是一个完美的解决方案,但仍然比使用解释器的完整路径更好。

【讨论】:

    【解决方案3】:

    您可以创建~./bash_profile 文件并将路径导出到python 3 bin 文件夹,它看起来像

    export PATH=“path-to-python3-bin-folder:$PATH”
    

    每次进入终端,输入source ~./bash_profile,现在就可以在终端调用python3作为函数来调用你的代码了。

    另一方面,我建议你下载 Anaconda,因为你可以使用你喜欢的 python 版本轻松创建虚拟环境。

    【讨论】:

      【解决方案4】:

      如果python 指的是 Python 2,那么*就是您所期望的。在命令行中使用python3,或者按照脚本本身来定义它的解释器。

      更详细地说,确保文件的第一行包含一个有效的 shebang(您似乎已经对此进行了排序);但是如果你明确地说python script.py,shebang 不会影响将使用的解释器。相反,使文件可执行,并使用./script.py 运行它。

      其实你也可以在命令行中使用envenv python3 script.py 也应该在提示符下工作。

      【讨论】: