我有一个很大的第三方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的版本或修改应用程序的源代码。
答案 0 :(得分:3)
用于保存多个Python环境的最常用工具是virtualenv。我喜欢在它周围使用一个名为virtualenvwrapper的含糖包装。
通常我使用以下方式安装它:
sudo pip install virtualenvwrapper
然后我在我的shell配置文件中添加如下所示的一行:
source /usr/local/bin/virtualenvwrapper.sh
现在,您可以为每个版本的Python创建一个虚拟环境。天哪,你可以为每个Python项目制作一个!
mkvirtualenv py3
mkvirtualenv py2 --python=python2
然后你可以输入:
暂时切换到python2workon py2
还有另一个名为pyenv的工具可让您轻松切换多个版本的Python。引用项目自述文件,“它简单,不引人注目,并且遵循单一用途工具的UNIX传统,它做得很好。这个项目是从rbenv和ruby-build分叉的,并为Python修改”。看起来很受欢迎。
两者都优雅,易于使用,非常适合此用例(暂时切换到终端窗口中的特定python版本)。
$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中硬编码Python路径。例如,假设程序的第一行是:
#!/usr/bin/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发行版,则内置虚拟环境。如果不是,请使用保罗建议的virtualenv
和virtualenvwrapper
。
此外,我建议autoenv
。有了这个,你可以根据你所在的文件夹自动更改你的venv。有一个用于bash,一个用于zsh。