2012-11-21 40 views
3

我刚刚在我们的服务器中安装了Python 2.7,他们之前安装了2.4版本。在非Python版本之间切换Python版本

在我构建新版本之后,我的路径仍然指向旧版本的python,你知道一个简单的方法来改变它。

我没有sudo权限也没有root权限。

+2

[virtualenv](http://www.virtualenv.org/en/latest/),而不仅仅是因为你想使用不同版本的python ......想象一下在你得到你的解释器后需要安装新模块 –

+0

尝试使用$ python2.7 – Netro

回答

3

因为你是在服务器上,并没有root权限,您的最佳选择是使用virtualenv

构建Python 2.7,例如如下:

$ ./configure --prefix=~/mydir 
$ make 
$ make install 

下载virtualen.py文件并运行:

$ ~/mydir/bin/python virtualenv.py my_environment 

这会为你创建一个孤立的Python 2.7环境中my_environment目录。

要激活它运行source my_environment/bin/activate就是这样。现在python可执行文件将成为你的Python 2.7。此外,您将安装pip,因此可以轻松地将任何其他库安装到您的环境中。

+0

Sourcing'activate'仅适用于当前会话。其他答案提到如何使用'.profile'或类似的设置来保持这种设置。 – MvG

+0

这里的要点是你可以有多个环境,所以当你登录到远程shell时,你可以选择激活哪一个。但我同意你还应该把'export PATH = $ PATH:/ path/to/install/dir/bin'放入'.bashrc'或其他东西,以便在virtualenv之外轻松访问Python 2.7可执行文件。 – Maxim

+0

谢谢!它为我工作。为了让它工作正常,我不得不做一些额外的操作: '$ export LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:〜/ mydir/lib'来启用查找共享库'libpython2.7.so.1.0'(因为我配置了选项' - -enable-shared')。 然后将上面的命令加上'source my_environment/bin/activate'添加到我的'.bashrc'中,让所有东西都保持不变。 最后'source〜/ .bashrc'。 –

0

首先,你应该检查你~/.profile和你弹的配置文件(例如~/.bashrc对于bash)任何export $PATH=(或PYTHONPATH,这取决于你指的是什么)含有违规路径的指令。如果有一些,请改变它们并重新登录。这应该能解决你的问题。

如果没有,请咨询您的管理员。如果这也没有帮助,您可以执行以下操作。在你的程序中,运行(可替代PATHPYTHONPATH,这取决于你真正需要的):

echo $PATH 

副本输出,并根据自己的需要修改它。然后打开另一个shell和运行(记得替换):

export PATH="whatever you copied before" 

检查,一切都正常(即,你仍然可以叫你所需要的所有应用程序和你的路径相应调整)。如果是这种情况,请将命令添加到您的~/.profile

0

这个答案假设你的环境是Linux,Unix或类似的东西。

如果您的问题是PATH环境变量没有指向正确的二进制文件,那么修改该文件:使其包含给定的目录,例如, ~/bin,通过执行PATH=${HOME}/bin:${PATH}从您的配置文件之一,例如~/.profile。确保创建该目录,并让它包含一个名为python的符号链接,指向正确的Python版本。

这对于具有硬编码路径的脚本(例如,从#!/usr/bin/python开始。当您直接从命令行调用这些参数时,您可以简单地调用解释器(即python),将脚本的名称作为参数传递:python /path/to/script.py。你甚至可以使用你想要的python版本,例如python2.7 /path/to/script.py

您也可以将此整个序列转换为~/bin目录中的脚本,例如,有~/bin/foo包含以下内容:

#!/bin/sh 
exec ${HOME}/bin/python2.7 /usr/bin/foo 

不要忘了chmod -x ~/bin/foo文件。您的PATH上有一个可执行的shell脚本,它位于系统上安装的默认版本之前。然后,脚本将使用一个非常具体的解释器来调用该默认版本。所以现在你可以简单地输入短名称,并且用你想要的Python版本执行官方脚本。

可能发生某些其他脚本尝试使用其绝对路径名执行给定python脚本。在这种情况下,不会对PATH进行修改。您必须修改相关脚本的第一行以读取到#!/usr/bin/env python。如果你无法控制这些脚本,那么你遇到了麻烦,并且需要更高级的黑客来调整系统,使其完成通常不会做的事情。想起了LD_PRELOAD

+0

对于使用'#!/ usr/bin/python'的脚本,只需将它直接传递给解释器'python27脚本' – Dikei

+0

@Dikei,你是对的,如果你是一个好的解决方案直接调用脚本。如果脚本调用其他脚本或类似的东西,事情只会变得麻烦。将编辑我的答案,以考虑到这一点。 – MvG