【问题标题】:Script Can't Find Python3脚本找不到 Python3
【发布时间】:2023-03-12 16:56:01
【问题描述】:

我正在尝试学习一点 Python3,所以,首先要做的事情是:Hello World。但尽管很简单,但我在第 1 行(Shebang 参考)上度过了一段糟糕的时光。我在运行 Mac Os 10.15.3 的笔记本电脑上创建以下脚本

#!/usr/bin/env python3
print('Hello World')

我将它保存为python_test-01.py,使脚本可执行,然后尝试运行它

Emonda:Scripts paul$ chmod 755 python_test-01.py 
Emonda:Scripts paul$ ls -l

-rwxr-xr-x@ 1 paul  staff   47 Mar  5 13:07 python_test-01.py

Emonda:Scripts paul$ ./python_test-01.py 
./python_test-01.py: line 1: #!/usr/bin/env: No such file or directory
./python_test-01.py: line 2: syntax error near unexpected token `'Hello World''
./python_test-01.py: line 2: `print('Hello World')'

嗯。找不到环境。好的,我将在 shebang 行中使用直接路径而不是 env。我编辑脚本以阅读

#!/usr/bin/python3
print('Hello World')

并运行它

Emonda:Scripts paul$ ./python_test-01.py 
./python_test-01.py: line 1: #!/usr/bin/python3: No such file or directory
./python_test-01.py: line 2: syntax error near unexpected token `'Hello World''
./python_test-01.py: line 2: `print('Hello World')'

现在它也找不到 Python3。所以我环顾四周以确保我确实安装了 env 和 python3 以及它们在哪里。

Emonda:Scripts paul$ cd /usr/bin/
Emonda:bin paul$ pwd
/usr/bin
Emonda:bin paul$ whereis env
/usr/bin/env
Emonda:bin paul$ whereis python3
/usr/bin/python3

是的,他们就在那里,就在我说他们会在 Shebang 线的地方。 /usr/bin/

第二章

在一次又一次地踢这个之后,我决定尝试一些不同的东西。我通过 ssh 连接到运行 Debian GNU/Linux 的 Raspberry Pi。我注意到它的 /usr/bin/ 目录中也安装了一个 Python3 版本。我使用 vim 编写相同的两行脚本,以相同的 shebang 开头:#!/usr/bin/python3。 Chmod 755。“你好世界”。第一次尝试就成功了。

这两个系统有什么不同?在 Raspberry Pi 中,一切都按预期工作。 Mac 怎么了?我应该在 mac 上哪里查找解释器找不到 Python3 的原因?

感谢老去陪我, 保罗

【问题讨论】:

  • 使用python3 ./python_test-01.py 有效吗?
  • 如果您是 Python 新手,请不要担心 shebang。您始终可以使用 python my_script.py 运行您的脚本。
  • @Ed Ward,是的,可行,但我的目标是能够从具有脚本菜单的 SQLite 应用程序中启动此脚本,因此我不能依赖命令行前言。
  • 您是否使用Textedit 来创建脚本?如果是这样,请务必在保存之前单击Format 菜单选项,然后单击Make Plain Text
  • 另一个陷阱:#!/usr/bin/env pythonX 在通过 MacPorts 安装 pythonX 时从脚本菜单运行时失败。也可能影响其他类型的安装。 env 可以与内置 python 配合使用。

标签: python-3.x macos shebang


【解决方案1】:

在所有这些以及您的所有出色输入之后,事实证明 MacOs 系统上的脚本文件是用 BOM 保存的 UTF-8。这足以使脚本的第一行,即 Shebang,对口译员来说难以辨认。将文件保存为 UTF-8 无 BOM 编码后,它按预期工作。

【讨论】: