【发布时间】:2012-11-21 09:44:21
【问题描述】:
我刚刚在我们的服务器上安装了 Python 2.7,他们之前已经安装了 2.4。
我构建新版本后,我的路径仍然指向旧版本的python,你知道一个简单的方法来改变这个吗?
我没有 sudo 权限,也没有 root 访问权限。
【问题讨论】:
-
virtualenv,而不仅仅是因为您想使用不同版本的 python...想象一下在获得解释器后需要安装新模块
标签: python
我刚刚在我们的服务器上安装了 Python 2.7,他们之前已经安装了 2.4。
我构建新版本后,我的路径仍然指向旧版本的python,你知道一个简单的方法来改变这个吗?
我没有 sudo 权限,也没有 root 访问权限。
【问题讨论】:
标签: python
因为你在服务器上并且没有root权限,所以你最好的选择是使用virtualenv
构建 Python 2.7,例如如下:
$ ./configure --prefix=~/mydir
$ make
$ make install
下载virtualen.py文件并运行:
$ ~/mydir/bin/python virtualenv.py my_environment
这将在my_environment 目录中为您创建一个隔离的 Python 2.7 环境。
要激活它运行source my_environment/bin/activate 就是这样。现在 python 可执行文件将是您的 Python 2.7。此外,您将安装 pip,因此可以轻松地将任何其他库安装到您的环境中。
【讨论】:
activate 仅适用于当前会话。其他答案提到如何使用.profile 或类似的方法来使此类设置持久化。
export PATH=$PATH:/path/to/install/dir/bin 放入.bashrc 或其他可以轻松访问virtualenv 之外的Python 2.7 可执行文件的内容。
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/mydir/lib 以启用查找共享库libpython2.7.so.1.0(因为我配置了选项--enable-shared)。然后将上面的命令加上source my_environment/bin/activate 添加到我的.bashrc 以使所有内容都持久化。最后source ~/.bashrc.
alias python=python2.7添加到.bashrc,以在运行脚本时保持一致性(因为我的系统在调用python时仍然调用2.6.6)。
首先,您应该检查您的 ~/.profile 和您的 shell 配置文件(例如,~/.bashrc 用于 bash)是否有任何包含违规的 export $PATH=(或 PYTHONPATH,具体取决于您所指的内容)指令小路。如果有,请更改它们并重新登录。那应该可以解决您的问题。
如果没有,请与您的管理员联系。如果这也没有帮助,您可以执行以下操作。在你的 shell 中,运行(可以用PYTHONPATH 代替PATH,这取决于你真正需要什么):
echo $PATH
复制输出并根据您的需要进行修改。然后打开另一个shell并运行(记住替换):
export PATH="whatever you copied before"
检查一切是否正常(即您仍然可以调用您需要的所有应用程序并且您的路径已相应调整)。如果是这种情况,请将命令添加到您的 ~/.profile。
【讨论】:
此答案假设您的环境是 Linux、Unix 或类似的环境。
如果您的问题是 PATH 环境变量未指向正确的二进制文件,则修改 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 文件。你会得到一个可执行的 shell 脚本,它在你的PATH 上比你系统上安装的默认版本早。然后,该脚本将使用非常特定的解释器调用该默认版本。所以现在你可以简单地输入短名称,并让你想要的python版本执行官方脚本。
可能会发生某些其他脚本尝试使用其绝对路径名执行给定 python 脚本的情况。在这种情况下,对PATH 的任何修改都无济于事。您必须修改相关脚本的第一行才能阅读,例如到#!/usr/bin/env python。如果您无法控制这些脚本,那么您就有麻烦了,并且需要更高级的 hack 来调整系统以执行通常不会执行的操作。 LD_PRELOAD 浮现在脑海中。
【讨论】:
#!/usr/bin/python的脚本,只需将其直接传递给解释器python27 script