我正在使用的Linux版本默认安装了Python 2.6,我们在另一个文件夹中安装了2.7版本。
如果我想运行一个.py脚本,如何告诉它使用2.7版本而不是默认的2.6版本呢?
很抱歉“抄袭”答案,但我觉得这里有点混乱。
有不同的方法可以实现这一点,这取决于决策是在哪个级别上做出的。
[感谢@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>
您可以使用python
,python2
或python2.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二进制文件,您可以覆盖所有其他选择。这是测试行为的非常好的方法,但不太可维护或共享。
使用update-alternatives --config python
命令,在选项中选择python2.7
。
如果需要删除,请使用update-alternatives --remove python /usr/bin/python2.7
命令。
#!/usr/bin/python
/usr/bin/python
指向的内容,以免破坏系统。某些应用程序需要将其指向一个兼容的版本。
相反,使用
#!/usr/bin/python3
#!/usr/bin/python2.7
需要使用Python2.7版本
如果您手动安装了Python(为什么?使用软件包更加智能,因为可以自动升级),那么请使用完整路径!
~/my-python/bin/python myscript.py
#!/home/whatever/my-python/bin/python
+x
,并且只需简单执行。./myscript.py
或者,如果你懒得打字,可以给自己取一个别名,比如py
。
用文本编辑器打开~/.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中并保存。
/usr/local/bin
的写访问权限,所以我认为这是可以的,抱歉! - Eliot S Winchell
.bashrc
ж–Ү件дёӯж·»еҠalias python="/path/to/python2.7"
гҖӮ - tobias_k#!/usr/bin/python27
。 - Adam Smith