Python 3 脚本使用什么 shebang 是 运行 无论有没有虚拟环境?

What shebang to use for a Python 3 script that is to be run both with and without a virtual environment?

我有一个 Python 3 脚本,我正在 Linux 机器 (Ubuntu) 上开发,但它将部署在嵌入式 Linux 设备上.

在我的开发机器上,我需要的包安装在 "virtual environment" 中,但在嵌入式设备上,包是全局安装的。设备上没有虚拟环境,因为它被设计为 运行 只有这个脚本。

我不知道应该在我的脚本之上添加什么 shebang。


根据 ,在虚拟环境中 运行 脚本的 shebang 应该是:

#!/usr/bin/env python

但是对于 运行 带有 Python 3 的脚本,shebang 应该是:

#!/usr/bin/python3

问题是如果我使用这些 shebang 中的第一个,脚本 运行 在我的开发机器上,但在部署时不会 运行。在嵌入式设备上,它尝试使用 Python 2 运行 并失败。当我使用第二个 shebang 时,脚本 运行s 在嵌入式设备上而不是在我的开发机器上,因为它没有使用虚拟环境中的 Python 3。

有没有我可以使用的 shebang 可以在两种情况下使用:有和没有虚拟环境?

是的,我知道我可以 运行 我的脚本作为 python3 my_script.py,shebang 无关紧要。如果我不能让一个 shebang 在这两种情况下工作,我想这就是我必须做的。

你很接近。您可以使用 python3 因为 pythonpython3 的 link 将在 virtualenv 的 bin 目录中创建。

只需这样做即可:

#!/usr/bin/env python3

...