Python 的 shebang 评估为与控制台中使用的相同路径不同的 Python 版本

Python's shebang evaluates to different Python version than the same path used in the console

今天是我使用 Python 的第一天,我使用 pyenv 来处理 Python 的版本。我成功安装了最新版本 (3.6.3) 并将其设置为全局

pyenv global 3.6.3

现在在终端中执行时

/usr/bin/env python

我得到了预期的正确响应

Python 3.6.3 (default, Oct 24 2017, 02:48:04) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.

然而,我遇到的问题是我在脚本文件中使用的 shebang 具有相同的 /usr/bin/env python 路径,但谁知道为什么它仍然评估为预装系统的 Python 版本,即 2.7。 6.

我正在检查这样的脚本使用的版本

#!/usr/bin/env python

import sys
print("Content-type:text/html\r\n\r\n")
print(sys.version)

浏览器(使用 Apache2)打印的内容是

2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8.4]

我正在重新启动 apache,使用 pyenv 配置,谷歌搜索任何提示但没有成功。

有人知道这里出了什么问题吗?非常感谢!

pyenv 允许您在 每个用户的基础上设置使用的 Python 版本

因此,如果您将用户 misza 设置为 3.6.3,其他用户(例如 www-data)将不会受到影响。

Web 服务器很可能会 运行 作为特殊用户(通常 www-data),因此您对个人设置所做的任何更改都不会影响 apache 看到的任何内容。

话虽如此,我真的认为无论如何在服务器之类的东西上使用 pyenv 都是一个坏主意:您的 脚本可能不是唯一的一个使用 #!/usr/bin/env python shebang 的。它也可能不是唯一依赖于特定 Python 版本调用的脚本(并且很有可能,大多数带有 #!/usr/bin/env python 的脚本实际上是 Python2.7 脚本)。

因此,如果您真的希望您的脚本在特定 Python 版本下 运行,您应该在 shebang 中使用该特定 Python 版本:

 #!/usr/bin/env python3.7

甚至

 #!/usr/bin/python3.8