如何临时切换到特定终端窗口中的python2?

时间:2016-03-29 07:37:53

标签: python linux

我有一个很大的第三方python2.7应用程序,一堆python脚本,它被添加到PATH中,它需要python2.7而不是我默认拥有的python 3.5。

$ python
Python 3.5.1 (default, Mar  3 2016, 09:29:07) 
[GCC 5.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 


$ python2
Python 2.7.11 (default, Mar  3 2016, 11:00:04) 
[GCC 5.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

我将该应用程序作为$ some_app arg1 arg2运行。如何使用python2作为临时解决方案,最好只在单个终端窗口中使用?

我不能用" python"替换该应用程序的调用。我把它称为$ some_app arg1 arg2。我不想永久更改python的版本或修改应用程序的源代码。

4 个答案:

答案 0 :(得分:3)

我最喜欢的方式:使用virtualenv或pyenv

用于保存多个Python环境的最常用工具是virtualenv。我喜欢在它周围使用一个名为virtualenvwrapper的含糖包装。

通常我使用以下方式安装它:

sudo pip install virtualenvwrapper

然后我在我的shell配置文件中添加如下所示的一行:

source /usr/local/bin/virtualenvwrapper.sh

现在,您可以为每个版本的Python创建一个虚拟环境。天哪,你可以为每个Python项目制作一个!

mkvirtualenv py3
mkvirtualenv py2 --python=python2

然后你可以输入:

暂时切换到python2
workon py2

还有另一个名为pyenv的工具可让您轻松切换多个版本的Python。引用项目自述文件,“它简单,不引人注目,并且遵循单一用途工具的UNIX传统,它做得很好。这个项目是从rbenv和ruby-build分叉的,并为Python修改”。看起来很受欢迎。

两者都优雅,易于使用,非常适合此用例(暂时切换到终端窗口中的特定python版本)。

Unix方式:设置$PATH

最佳做法是为Python脚本编写shebang,如:

#!/usr/bin/env python

如果您运行的第三方应用程序遵循此约定,则可以更改PATH。例如,假设默认的python解释器不是您想要的那个:

$ env python --version
Python 3.5.1

制作你想暂时默认设置的python的本地副本(你只需要这样做一次):

$ mkdir ~/local
$ mkdir ~/local/python2
$ ln -s `which python2` ~/local/python2/python

然后每次你想让python2成为默认值时,执行:

$ export PATH=~/local/python2/:$PATH

现在默认值是您想要的版本:

$ env python --version
Python 2.7.10

积极的业力方式:如果第三方应用在shebang中有一条硬编码路径

也许应用程序作者没有遵循最佳实践并在shebang中硬编码Python路径。例如,假设程序的第一行是:

#!/usr/bin/python

在这种情况下,以前的技巧都不起作用。就个人而言,我会将其更改为规范形式,并向第三方应用程序的作者发送拉取请求。

专横的方法:更改系统范围内的默认Python版本

虽然这并没有真正回答你的问题 - 因为它会影响系统中的每个窗口和其他用户 - 我为了完整起见而提到它。

例如,如果您使用的是Ubuntu,则可以使用以下命令更改默认的python解释器:

$ update-alternatives --config python

其他Linux发行版可能有这样的东西。

又快又脏

shebang只是告诉shell使用给定的解释器调用脚本。您可以在将应用程序调用为interpreter app时覆盖shebang:

$ python2 `which app_name`

或者:

$ python2 /path/to/app_name

您也可以编辑该程序并更改shebang

#!/usr/bin/python2

请注意,这将永久地更改该程序的Python解释器,它不是临时的,也不限于特定的终端。最糟糕的是,如果程序在全局PATH中,系统的所有其他用户都将受到影响。如果要还原旧行为,则必须撤消更改。

那就是说,有时你只是不关心做得对,你只是想让它发挥作用。

答案 1 :(得分:0)

您可以使用终端别名。 别名不会是暂时的,但它不会影响您的系统,因此您可以使用以下简短别名:

alias pyt“/usr/bin/python2.7” 在主目录中的.bashrc文件中

答案 2 :(得分:0)

由于问题是用Linux标记的,我假设您的脚本以该行开头

#! /usr/bin/env python

这很好,允许系统选择当前的Python安装,但是这里你的要求是专门使用版本2.7

所以恕我直言,您只需要更改hashbang行以选择所需的版本:

#! /path/to/python-2.7    

答案 3 :(得分:0)

如果您使用Anaconda作为Python发行版,则内置虚拟环境。如果不是,请使用保罗建议的virtualenvvirtualenvwrapper

此外,我建议autoenv。有了这个,你可以根据你所在的文件夹自动更改你的venv。有一个用于bash,一个用于zsh。

相关问题