【问题标题】:Python import error when execute Mercurial执行 Mercurial 时 Python 导入错误
【发布时间】:2012-02-25 10:51:40
【问题描述】:

我的系统是 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 吗?

非常感谢,

【问题讨论】:

  • 安装完python 2.6后有没有试过重新安装mercurial?
  • 我需要先删除 mercurial 再重新安装吗?或者我可以简单地重新安装它而不先删除任何东西?

标签: python mercurial installation hardlink


【解决方案1】:

您的 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 一个。

【讨论】:

  • 我同意 fayaz,但我要补充一点,可能发生的情况是安装的新版本的 mercurial 使用命令“from mercurial import ...”并且由于不正确(对于 2.6) PYTHONHOME 变量,它正在查找(从新脚本的角度来看已过时)2.4 mercurial 库。
【解决方案2】:

我建议将 /usr/bin/python 改回系统的 Python 2.4 以避免破坏系统的稳定性。通过符号链接到/usr/bin/python2.4 然后将/usr/local/bin/python 符号链接添加到/usr/bin/python2.6 来做到这一点。

然后更改您在 shell rc 文件中的路径(例如 ~/.bashrc)以首先找到本地 python(export PATH=/usr/local/bin:$PATH,如果它还没有按该顺序),然​​后编辑 /usr/bin/hg 的第一行以#!/usr/bin/env python 以便它在您的用户会话中默认运行。

如果由于某种原因,python 仍在尝试加载错误版本的 python 库(运行 2.6 python 二进制文件时为 2.4),您可以更改 python 可执行文件用于定位其主页的搜索路径PYTHONHOME 环境变量。

最好不要在整个系统范围内更改此系统,因为可能有很多 Python 脚本被卷入操作系统,这些脚本可能与 Python 2.6 不兼容。尝试将其添加到您的 shell rc 文件中。

如果出于某种原因 PYTHONHOME 不这样做,您可以直接编辑 PYTHONPATH 环境变量(在您的 rc 文件中),您可以在其中添加 python 2.6 库路径。

我建议镜像python -c "import sys; print '\n'.join(sys.path)"的输出。

当运行 python 2.6 时,这个单行应该显示 python 2.6 路径,但如果它仍然显示 2.4 路径,您需要将它显示的路径替换为 python 2.6 的正确路径(可能是相同的, 仅使用“6”而不是“4”)

【讨论】:

  • 抱歉我的系统知识太少了。你能解释更多吗?
    (1) 如何将python2.6库路径添加到PYTHONPATH?我只需要输入命令“python -c”import sys; print '\n' join(sys.path")" (2)如何将/usr/bin/python改回系统的2.4?我在 /usr/bin/ 目录中使用了命令“rm python2.6”。但是,当我输入“python -V”时,它仍然显示 python 2.6.5。这是否意味着我没有正确更改它? (3) 如您的回复,我应该在哪里添加 "usr/local/bin/python" ?非常感谢
  • 为清楚起见,编辑我上面的消息,对不起。
  • 您好我已经尝试了几个步骤并编辑了我的问题。你对这个问题有任何想法吗?非常感谢,
猜你喜欢
  • 1970-01-01
  • 2013-02-10
  • 2022-12-18
  • 1970-01-01
  • 2013-10-13
  • 2017-05-18
  • 2020-05-29
  • 1970-01-01
  • 2019-08-05
相关资源
最近更新 更多