python import在mercurial_keyring.py文件中的行为似乎有所不同


问题内容

一个奇怪的import错误使我无法安装Mercurial扩展程序。

我正在尝试使mercurial_keyring扩展程序运行,这样我每次使用Mercurial进行项目时都不必键入用户名和密码。

我正在使用Python 2.7.1。我使用https://www.mercurial-scm.org/提供的二进制文件安装了mercurial 。

我安装keyringmercurial_keyring使用pip

我首先尝试通过将扩展名添加到来添加扩展名~/.hgrc

[extensions]
...
mercurial_keyring =

在安装说明表示这里。但是,出现以下错误:

*** failed to import extension mercurial_keyring: No module named mercurial_keyring

根据相同的安装说明,我尝试将mercurial直接指向该mercurial_keyring.py文件,该文件起作用了。

[extensions]
...
hgext.mercurial_keyring = /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mercurial_keyring.py

事情似乎正在发展。

但是,当我尝试执行任何要求输入密码的命令时,都会被keyring例如 )保存hg pullhg push因此出现错误

abort: No module named keyring!

最令人困惑的部分是

import keyring

第28行中的mercurial_keyring.py内容已解决,没有任何问题。实际上,任何import keyring成功都在类和方法之外进行而在它们内部失败!

只是为了全面起见,我将尝试在尝试以下操作时在方法mercurial_keyring.py中的PasswordStore类中出现此错误get_http_password

return keyring.get_password(...)

有什么想法吗?

我感觉自己缺少明显的东西,但是我花了很多时间试图弄清楚这一点,到目前为止,Google并不是特别有用。任何输入将不胜感激。


问题答案:

很可能hg是使用系统python(2.6)而不是已安装的2.7的副本运行的。

尝试在2.6mercurial_keyringkeyring2.6下安装,然后查看是否可以按预期运行。