我有一台运行 Ubuntu 10.04 的服务器,我想通过以下方式安装 Mercurial
% sudo apt-get install mercurial
它似乎已成功安装,并且没有显示任何错误消息。但是当我尝试时,我得到了:
% hg
abort: couldn't find mercurial libraries in [/usr/bin /usr/lib/python2.6 /usr/lib/python2.6/plat-linux2 /usr/lib/python2.6/lib-tk /usr/lib/python2.6/lib-old /usr/lib/python2.6/lib-dynload /usr/lib/python2.6/dist-packages /usr/lib/pymodules/python2.6 /usr/local/lib/python2.6/dist-packages]
(check your install and PYTHONPATH)
我已经在 Google 上搜索了一段时间,发现一些网站也有同样的问题,但我仍然不知道如何解决它,因为它没有真正说明我需要寻找什么或需要添加到我的 PYTHONPATH 中...
顺便说一句,现在我的 PYTHONPATH 似乎是空的:
% echo $PYTHONPATH
%
这是我在 /usr/lib/ 目录中查找 mercurial 时得到的结果:
% find /usr/lib/py* -name 'mercurial*'
/usr/lib/pymodules/python2.6/mercurial
/usr/lib/pymodules/python2.6/mercurial-1.4.3.egg-info
/usr/lib/pyshared/python2.6/mercurial
有人能帮我吗?我应该将 PYTHONPATH 设置为什么(以及如何设置)?我已经尝试过重新安装、使用“easy_install mercurial”或“aptitude reinstall mercurial”进行安装,但都无济于事。我总是得到同样的错误。
如果有人能帮忙就太好了...谢谢!
添加:
从头开始构建效果并不好...当我以 root 身份登录时,我可以使用 hg,但是当我以普通用户身份访问时,我得到:
% hg
Traceback (most recent call last):
File "/usr/local/bin/hg", line 4, in <module>
import pkg_resources
File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 2659, in <module>
parse_requirements(__requires__), Environment()
File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 546, in resolve
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: mercurial==1.7.2
答案1
我不确定这个问题的具体原因,但我已经通过从源代码安装 Mercurial 解决了类似的问题(不过,您可能需要先删除所有 Mercurial 包)。
下载 Mercurial 压缩包这里并提取它:
tar tvf mercurial-1.7.5.tar.gz
cd mercurial-1.7.5
python setup.py install
...这样就可以了。如果您安装了多个版本的 Python(2.5、2.6、2.7),请使用最新版本。
答案2
当我在 OS X 中将系统 Python 的优先级设置为高于使用 Homebrew 安装的 Python 版本时,我也遇到了类似的问题。我应该将 Homebrew 版本添加到 PATH 的前面,而不是后面。更多信息请访问https://github.com/mxcl/homebrew/wiki/Homebrew-and-Python。
因此,在.bash_profile
或类似的 rc 文件中,我改变了
PATH=/usr/local/share/python:"${PATH}"
PATH=/usr/local/bin:"${PATH}"
到
PATH=/usr/local/bin:"${PATH}"
PATH=/usr/local/share/python:"${PATH}"
然后 Mercurial 停止抛出该错误。
答案3
(我希望你现在已经解决了这个问题,但无论如何我还是会尝试给出一些关于如何找到 Mercurial 的建议。)
第一:请来到 IRC 频道如果您遇到此类问题。这比尝试随机方法使其正常工作要好得多——到处安装东西只会让您和您的系统更加混乱 :-)
听起来您尝试过许多不同的方法来安装 Mercurial。混合使用不同的方法来安装 Mercurial(或任何其他 Python 程序)时要非常小心。您收到的第二个错误是因为您正在启动一个版本的 Mercurial(版本 1.7.2),但它正在查找较旧的库。因此,您现在可能已经有两个或多或少可以正常工作的安装。
所以我的建议是删除 Ubuntu 软件包并删除任何其他版本的 Mercurial。搜索调用的目录和文件mercurial
并删除它们(但当然先删除软件包)。
然后安装软件包——如果 Ubuntu 常规存储库中的版本太旧,则使用Mercurial PPA。您收到的第一个错误意味着 Mercurial 无法找到它的库(当您从 Ubuntu 软件包安装 Mercurial 时,这当然是奇怪且意外的)。尝试运行
$ python -c 'import mercurial; print mercurial'
看看您是否可以mercurial
自己导入包。如果可以,那么您将看到包所在的位置,并且可以将父目录添加到PYTHONPATH
:
$ PYTHONPATH=/usr/lib/python2.7/dist-packages/ hg debuginstall
如果这不起作用,请搜索commands.py
。这是 Mercurial 中的一个文件,该文件的祖父目录应该在你的 上PYTHONPATH
。
这应该可以让你启动并运行...但是,再说一次,当你使用包管理器安装 Mercurial 时,你不必自己摆弄它。
答案4
只需将 Mercurial lib 路径添加到 PYTHONPATH。
- 找到库:
locate mercurial
,并找到 Lib PATH。例如 /usr/lib64/python2.6/site-packages/mercurial ; - 将 Lib 路径添加到 PYTHONPATH:
export PYTHONPATH=$PYTHONPATH:/usr/lib64/python2.6/site-packages
。
Lib 路径可能在你的机器上是不同的位置。你可以将导出语句永久添加到 ~/.bashrc 或 ~/.zshrc 。