python导入在mercurial_keyring.py fi中的行为似乎不同

2024-04-26 00:56:10 发布

您现在位置:Python中文网/ 问答频道 /正文

一个奇怪的import错误阻止我安装mercurial扩展。

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

我使用的是Python2.7.1。我用https://www.mercurial-scm.org/提供的二进制文件安装了mercurial。

我用pip安装了keyringmercurial_keyring

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

[extensions]
...
mercurial_keyring = 

如安装说明here所示。但是,我得到了以下错误:

*** 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

一切似乎都在向前发展。

但是,当我试图执行任何需要我的密码的mercurial命令以便通过keyring例如hg pullhg push)保存它时,我会得到错误

abort: No module named keyring!

最让人困惑的是

import keyring

mercurial_keyring.py的第28行中,没有任何问题得到解决。事实上,任何import keyring在类和方法外部成功,在类和方法内部失败!

为了彻底起见,我将提到这个错误出现在get_http_password方法中PasswordStore类的mercurial_keyring.py中,尝试执行以下操作

return keyring.get_password(...)

有什么想法吗?

我有种感觉,我遗漏了一些显而易见的东西,但我花了很多时间试图弄清楚这一点,而谷歌到目前为止并没有特别的帮助。如有任何意见,将不胜感激。


Tags: 文件方法nopyimport密码get错误
3条回答

Mercurial使用了一个名为“demandimport”的特性,它将推迟模块的导入,直到第一次使用它们。所以,你的

import keyring

不会在那一行失败,但它只有在第一次使用时才会哀号(即)

return keyring.get_password(...)

我遇到了同样的问题,并通过使用easy install安装扩展解决了该问题: sudo easy_安装mercurial_钥匙圈

这将它安装在mercurial使用的同一个python下。

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

尝试在2.6下安装mercurial_keyringkeyring,看看这是否能让事情按预期工作。

相关问题 更多 >