Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在特定的终端窗口中临时切换到python2?_Python_Linux - Fatal编程技术网

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

如何在特定的终端窗口中临时切换到python2?,python,linux,Python,Linux,我有一个大型的第三方python2.7应用程序,一堆python脚本,它被添加到PATH中,它需要python2.7,而不是我默认使用的Python3.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. >>> $ python

我有一个大型的第三方python2.7应用程序,一堆python脚本,它被添加到PATH中,它需要python2.7,而不是我默认使用的Python3.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_应用程序arg1 arg2运行。如何让它使用python2作为临时解决方案,最好只在单一终端窗口中使用


我不会用python代替对该应用程序的调用。我把它叫做$some_app arg1 arg2。我不想永久更改python版本或修改应用程序的源代码。

您可以使用terminal alias。别名不是临时的,但不会影响您的系统,因此您可以使用短别名,如:

别名pyt/usr/bin/python2.7 在主目录中的.bashrc文件中

我最喜欢的方式:使用virtualenv或pyenv 保存多个Python环境最常用的工具是。我喜欢在它周围用一种叫做“糖纸”的糖纸

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

sudo pip install virtualenvwrapper
然后,我在shell配置文件中添加一行,如下所示:

source /usr/local/bin/virtualenvwrapper.sh
现在,您可以为每个版本的Python创建一个虚拟环境。天哪,你可以为每个Python项目制作一个

mkvirtualenv py3
mkvirtualenv py2 --python=python2
然后,您可以通过键入以下内容临时切换到python2:

workon py2
还有另一个名为的工具,可以让您轻松地在Python的多个版本之间切换。引用项目自述,它简单、不引人注目,并且遵循UNIX的单一用途工具的传统,可以很好地完成一件事。这个项目来自rbenv和ruby构建,并针对Python进行了修改。看起来它越来越流行了

两者都非常优雅、易于使用,非常适合在终端窗口中临时切换到特定python版本的用例

Unix方式:设置$PATH 编写Python脚本的最佳实践是:

#!/usr/bin/env python
如果您正在运行的第三方应用程序遵循此约定,您可以更改路径。例如,假设默认python解释器不是您想要的解释器:

$ env python --version
Python 3.5.1
$ env python --version
Python 2.7.10
制作python的本地副本如果要临时设置为默认值,只需执行一次:

$ mkdir ~/local
$ mkdir ~/local/python2
$ ln -s `which python2` ~/local/python2/python
然后,每次要将python2设为默认值时,请执行以下操作:

$ export PATH=~/local/python2/:$PATH
现在,默认版本是您想要的版本:

$ env python --version
Python 3.5.1
$ env python --version
Python 2.7.10
积极的因果报应方式:如果第三方应用程序在shebang中有硬编码路径 也许应用程序作者没有遵循最佳实践,而是在应用程序中硬编码了Python路径。例如,假设程序的第一行是:

#!/usr/bin/python
在这种情况下,前面的技巧都不起作用。就我个人而言,我会将其更改为规范形式,并向第三方应用程序的作者发送一个pull请求

专横的方法:更改系统范围内的默认Python版本 虽然这并不能真正回答您的问题——因为它影响到系统中的每个窗口和其他用户——但我提到它是为了完整性

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

$ update-alternatives --config python
其他Linux发行版可能有类似的内容

又快又脏 只需告诉shell使用给定的解释器调用脚本。当以解释器应用程序的身份调用应用程序时,您可以覆盖shebang:

或:

您也可以编辑程序并更改:

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


也就是说,有时候你只是不想把它做好,你只是想让它工作。

因为这个问题是用Linux标记的,我想你的脚本就是从这一行开始的

#! /usr/bin/env python
允许系统选择当前的Python安装非常好,但这里您的要求是专门使用版本2.7

因此,IMHO您只需更改hashbang行即可选择所需的版本:

#! /path/to/python-2.7    

如果您使用Anaconda作为Python发行版,那么它内置了虚拟环境。如果没有,请按照Paul的建议使用virtualenv和VirtualVWrapper


此外,我推荐autoenv。有了它,您可以根据您所在的文件夹自动更改venv。有一个用于bash,一个用于zsh。

python2/path/to/some_app arg1 arg2?这个应用程序是Python脚本吗?它有类似的东西吗/usr/bin/env python在第一行?会添加吗/usr/bin/env python2.7对您有帮助吗?或者可能只是从终端python2.7应用程序arg1 arg2调用可能会起作用,但也有其他非常流行的解决方案可以避免修改第三方脚本。
#! /path/to/python-2.7