执行Mercurial时的Python导入错误
我的系统是RedHat 5 Linux,默认安装了python 2.4。为了能运行Mercurial1.81,我尝试把python从2.4升级到2.6,并把它放在不同的目录里。
我用过的命令如下:
find -xdev -samefile /usr/bin/python | xargs rm
我试图删除用来连接python和python2.6的硬链接,然后我使用了以下命令:
ln -s /usr/bin/python2.4 /usr/bin/python
ln -s /usr/bin/python2.6 /usr/local/bin/python
export PATH=/usr/local/bin:$PATH
Change first line of hg to #!/usr/bin/env python
PATHONHOME=/usr/lib/python2.6
PATHONPATH=/usr/lib/python2.6
当我输入“whereis python”时,得到了以下结果。
python: /usr/bin/python2.4
/usr/bin/python
/usr/lib/python2.4
/usr/lib/python2.6
/usr/local/bin/python
/usr/include/python2.4
/usr/include/python2.6
/usr/share/man/man1/python.1.gz
接着我输入“which python”,它指向了“usr/bin/python”。当我输入“python -V”时,显示的是“python 2.4.3”。看起来又指回了2.4.3。然后我使用了这个命令:
python -c "import sys; print '\n' .join(sys.path)"
它显示了
/usr/lib64/python24.zip
/usr/lib64/python2.4
/usr/lib64/python2.4/plat-linux2
/usr/lib64/python2.4/lib-tk
/usr/lib64/python2.4/lib-dynload
/usr/lib64/python2.4/site-packages
/usr/lib64/python2.4/site-packages/Numeric
/usr/lib64/python2.4/site-packages/gtk-2.0
/usr/lib/python2.4/site-packages
我试着通过输入“find / -name python2.6”来查找python 2.6的路径,结果显示:
/usr/include/python2.6
/usr/lib/python2.6
/usr/lib64/python2.6
我有几个问题:
(1) 我该如何把上面命令的结果替换成python2.6?
(2) 为什么我找不到像/usr/bin/python2.6或/usr/local/bin/python2.6这样的目录?这是不是意味着我安装python2.6时出错了,或者不小心删除了这个目录?
我输入的那些命令得到的结果有什么问题吗?
(3) 有没有办法让系统在我使用“hg push”时执行python2.6?
(4) 我是否应该在/usr/local/bin重新安装python2.6?
非常感谢!
2 个回答
你的Mercurial安装在 /usr/lib64/python2.4/site-packages/mercurial
这个地方。这个安装需要用到Python 2.4。而 /usr/bin/hg
文件的第一行可能是:
#!/usr/bin/python
假设你是从官方的仓库安装的,Mercurial就需要默认的Python版本正好是2.4。所以,随便改动 /usr/bin/python
这个文件并不是个好主意。如果这真的让你烦恼,你可以在新的Python 2.6上用 easy_install
来安装一个。
我建议把 /usr/bin/python
改回系统自带的 Python 2.4,这样可以避免系统不稳定。你可以通过创建一个指向 /usr/bin/python2.4
的符号链接来实现,然后再创建一个指向 /usr/bin/python2.6
的符号链接,放在 /usr/local/bin/python
。
接下来,修改你的 shell 配置文件(比如 ~/.bashrc
),让它优先找到本地的 Python。可以用 export PATH=/usr/local/bin:$PATH
这行代码,如果它还不是这个顺序的话。然后,把 /usr/bin/hg
的第一行改成 #!/usr/bin/env python
,这样在你的用户会话中默认就会运行这个。
如果 Python 还是因为某些原因(比如你在用 Python 2.6 的时候,它却试图加载 2.4 的库)加载了错误版本的库,你可以通过设置 PYTHONHOME 环境变量来改变 Python 可执行文件寻找它自己位置的路径。
不过,最好不要在系统范围内更改这个,因为系统中可能有很多 Python 脚本与 Python 2.6 不兼容。你可以尝试把它添加到你的 shell 配置文件中。
如果因为某种原因 PYTHONHOME 还是不管用,你可以直接在你的配置文件中修改 PYTHONPATH
环境变量,添加 Python 2.6 的库路径。
我建议你运行 python -c "import sys; print '\n'.join(sys.path)"
来查看输出。
这个一行代码应该在运行 Python 2.6 时显示出 Python 2.6 的路径,但如果它还是显示 2.4 的路径,你需要把显示的路径替换成 Python 2.6 的正确路径(通常只需把 "4" 改成 "6" 就可以了)。