【问题标题】:Portable way to write Python 3 shebang?编写 Python 3 shebang 的可移植方式?
【发布时间】:2023-01-24 16:00:51
【问题描述】:

回到 Python3 的时候,我曾经使用:

#!/usr/bin/env python3

但最近,特别是在 Ubuntu 22.04 或 macOS 上,python3 可执行文件并不总是在 PATH 中可用,相反,我应该使用 python 来调用 python3

有什么可移植的方法来编写 Python3 shebang 吗?

【问题讨论】:

  • 等等,Ubuntu 22.04 删除了python3?我自己还在20.04。我在线检查了依赖项,它似乎仍然存在:ubuntu-desktop -> software-properties-gtk -> python3 -> python3-minimal: /usr/bin/python3;和 ubuntu-server -> software-properties-common -> python3。
  • sudo apt 安装 python-is-python3
  • 为了真正的可移植性,通过 pyenv 使用 virtualenv。然后你的系统会执行 pyenv activate my_python3.x.y_env 并且只使用正常的 shebang 运行脚本。使用 virtualenv 和 pyenv 消除了对系统 python 的所有依赖以及包依赖的问题。
  • 安装过程会将任何包含单词 python 的 shebang 替换为用于实际安装脚本的任何内容。 #!python 就足够了。你作为作者的代码不应该担心在哪里用户保留他们将用来执行它的 Python 版本。
  • 恕我直言,将python3 -> python 符号链接到/usr/bin 或类似的东西比处理大量的shebang 更容易。

标签: python portability shebang


【解决方案1】:

根据 Python docs 的说法,使用 #!/usr/bin/env python3 仍然是推荐的方式——但他们承认它并不总是有效:

2.4.各种各样的

要在 Unix 上轻松使用 Python 脚本,您需要使它们可执行,例如和

chmod +x 脚本

并在脚本顶部放置适当的 Shebang 行。一个好的选择通常是

#!/usr/bin/env python3 它在整个 PATH 中搜索 Python 解释器。但是,某些 Unice 可能没有 env 命令,因此您可能需要将 /usr/bin/python3 硬编码为解释器路径。

另一种方法是对 python 二进制文件进行硬编码,即 /usr/bin/python3(或在您的情况下为 python)。

【讨论】: