如何在Linux上选择正在运行的Python版本?

4

我正在使用的Linux版本默认安装了Python 2.6,我们在另一个文件夹中安装了2.7版本。

如果我想运行一个.py脚本,如何告诉它使用2.7版本而不是默认的2.6版本呢?


2
дҪ еҸҜд»ҘеңЁ.bashrcж–Ү件дёӯж·»еҠ alias python="/path/to/python2.7"гҖӮ - tobias_k
4
在脚本顶部使用“shebang”(井号和叹号组成的符号):#!/usr/bin/python27 - Adam Smith
python2.7 <文件名> 可以解决。 确保您已将安装路径添加到 $ PATH 变量中。 - Prune
从评论和答案中可以看出,有很多种实现这个目标的方式。不同之处在于你希望在哪个层面上做出决策。可以是:系统层面、用户层面、脚本层面或执行层面。 - MariusSiuram
4个回答

2

很抱歉“抄袭”答案,但我觉得这里有点混乱。

有不同的方法可以实现这一点,这取决于决策是在哪个级别上做出的。

系统级别

[感谢@WoLy]

使用系统的update-alternatives功能。具体来说,请使用

$ update-alternatives --config python

并且您可以选择特定版本。

结果:一旦您这样做了,所有使用“python”的内容都将使用python2.7二进制文件。这将在整个系统中为所有用户发生。

用户级别

这有点棘手。感谢@TheFlyingProgrammer

基本方法是更改.bashrc文件以更改路径和/或添加别名。问题是如果您依赖文件的“shebang”:

#!/usr/bin/python
<code python here>

这种类型的文件不会受到你所做的更改的影响。然而:

#!/usr/bin/env python
<code python here>

或执行如

$ python name_of_script.py

将使用所选解释器(在.bashrc文件中强制指定的解释器)。

结果:修改后的.bashrc文件的所有者将默认使用所选解释器。但某些shebang行为可能会有所不同,所以需要小心谨慎。

脚本级别

[感谢@Anony-Mousse]

“shebang”方式,修改第一行。想法是在Python源代码文件的第一行使用完整路径:

#!/usr/bin/python2.7 
<code python here>

您可以使用pythonpython2python2.7,并且您的版本会更加具体。如果您希望它是可移植的,则可能会出现问题。一种类似的方法是使用完整的版本规范但不包括路径:

#!/usr/bin/env python2.7
<code python here>

请注意,如果PATH未正确设置,这将无法正常工作。这为用户(在设置PATH时)提供了一定的权力。例如,您可以选择#!/usr/bin/env python2来强制使用某些Python 2.x版本,但也许具体的二进制文件会因用户而异。

此外,请记住,如果您计划使用虚拟环境,则建议使用/usr/bin/env python(如果我没有记错的话)。

结果:好吧,这取决于您是否使用env二进制文件。但在任何情况下,您都将语义放入文件中,在许多情况下都是有意义的(例如,如果存在不兼容性,则在脚本级别上进行处理)。

执行级别

[感谢@Prune]

这是最简单的方法:

$ /path/to/your/python/bin/python2.7 my_script.py

你可以更改要使用的二进制文件(Python解释器会忽略shebang,因为它是一条注释)。

结果:通过精选Python二进制文件,您可以覆盖所有其他选择。这是测试行为的非常好的方法,但不太可维护或共享。


2

使用update-alternatives --config python命令,在选项中选择python2.7
如果需要删除,请使用update-alternatives --remove python /usr/bin/python2.7命令。


1
如果你需要特定版本,请使用完整路径。 如果你安装了python2.7和python3.4(这很常见,因为它们不是完全兼容的): 一个带有:
#!/usr/bin/python

通常出于兼容性考虑,会使用最新版本的Python2。**请避免覆盖/usr/bin/python指向的内容,以免破坏系统。某些应用程序需要将其指向一个兼容的版本。

相反,使用

#!/usr/bin/python3

使用最新的 Python 3。
#!/usr/bin/python2.7

需要使用Python2.7版本

如果您手动安装了Python(为什么?使用软件包更加智能,因为可以自动升级),那么请使用完整路径

~/my-python/bin/python myscript.py

或者,如果您的脚本以shebang开头:
#!/home/whatever/my-python/bin/python

所以您可以对脚本执行+x,并且只需简单执行。
./myscript.py

或者,如果你懒得打字,可以给自己取一个别名,比如py


0

用文本编辑器打开~/.bashrc,并添加 alias python=/usr/local/bin/python2.7

如果您正在使用Cent OS作为您的Linux发行版,您会注意到sudo python <file.py>无法正常工作。这是因为sudo没有将/usr/local/bin作为安全路径。用文本编辑器打开/etc/sudoers,您应该可以看到

#
# Adding HOME to env_keep may enable a user to run unrestricted
# commands via sudo.
#
# Defaults   env_keep += "HOME"

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

:/usr/local/bin添加到secure_path中并保存。


谁会在意安全性呢? - Has QUIT--Anony-Mousse
@Anony-Mousse 默认情况下,只有root用户才有对/usr/local/bin的写访问权限,所以我认为这是可以的,抱歉! - Eliot S Winchell

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