Python的shebang在命令行中与相同路径产生的Python版本不同

3

今天是我使用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配置,搜索任何提示,但没有成功。 有人知道这里出了什么问题吗?非常感谢!

{btsdaf} - Nae
1个回答

1

pyenv可以让你在每个用户基础上设置所使用的Python版本。

因此,如果你将它设置为3.6.3,那么只有用户misza会受到影响,其他用户(如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

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