Python3在Mac shell脚本中无法运行

5
我正在尝试在macOS 10.12上使用Automator启动Python 3脚本。当我在终端中使用命令python3 my_script.py运行脚本时,它能够正常工作。
Automator有一个“运行Shell脚本”的功能,它使用/bin/bash 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 命令。 - Mark Setchell
哥们,我在 Mac 上很蠢,但我建议你首先使用 Python 3.4。这是 Python 3 最稳定的版本。 否则,你的“变通方法”是获取它(路径问题)的正确方式。 - SnowBG
我运行了 chmod +x,但是没有帮助。权限为:-rwxr-xr-x - Slipup
如果你运行 which python3,它应该告诉你正确的 shebang 路径。 - Mark Setchell
4个回答

2

既然您已经添加了shebang行,那么只需执行./my_script.py即可运行Python 3。


2
为了澄清这个工作原理:当你使用 python my_script.py 命令运行脚本时,python 命令会显式地覆盖 shebang。如果 没有指定要使用哪个解释器 运行脚本(例如只用 ./my_script.py),操作系统会查看 shebang 来确定要使用哪个解释器。 - Gordon Davisson
感谢您的建议。我尝试了不使用“python”命令运行,但现在出现错误:“env: python3: 没有那个文件或目录”,但这对我来说没有意义,因为当我在终端中运行“which python3”时,我得到的是“/Library/Frameworks/Python.framework/Versions/3.5/bin/python3”。感谢您的帮助! - Slipup

1
你可以通过Homebrew安装Python 3,使用brew install python3命令,并将#!/usr/local/bin/python3作为你的shebang注释。
这不是一个完美的解决方案,但仍然比使用解释器的完整路径要好。

0
你可以创建一个~./bash_profile文件,并将Python 3二进制文件夹的路径导出,它会像这样:
export PATH=“path-to-python3-bin-folder:$PATH

每次进入终端时,输入source ~./bash_profile,现在您可以在终端中调用python3作为函数来调用您的代码。
另一方面,我建议您下载Anaconda,因为您可以使用所需版本的python轻松创建虚拟环境。

-1
如果 python 指的是 Python 2,那么您应该期望这样。在命令行中使用 python3,或者让脚本自己定义解释器。
更详细地说,确保文件的第一行包含有效的 shebang(您似乎已经解决了这个问题);但是,如果您明确地说出 python script.py,则 shebang 不影响将使用哪个解释器。相反,使文件可执行,并使用 ./script.py 运行它。
实际上,在命令行中也可以使用 envenv python3 script.py 在提示符下也应该能够工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接