15

我们正在工作中试驾 Mercurial。我们不想在每次与存储库交互时都输入我们的用户/密码,因此我们设置了 mercurial_keyring 扩展。我们:

  • 已安装 Python 2.6.5(32 位或 64 位,取决于系统)
  • 已安装 setuptools(用于 easy_install.exe)
  • easy_install 密钥环
  • easy_install mercurial_keyring

然后对该部分中的 %userprofile%/mercurial.ini 进行适当的更改[auth]。它在我同事的计算机(32 位 xp sp3)上运行良好,但在我的机器(Windows 7 Ultimate x64)上无法运行。同样值得注意的是,setuptools 必须从 Win 7 x64 上的源代码构建(python setup.py bdist_wininst然后运行生成的 setuptools-0.6c11.win-amd64.exe)。

仅使用 Mercurial 1.5 二进制安装(.msi)中的 hg.exe,运行 hg.exe 时出现此错误:

*** 未能导入扩展 mercurial_keyring:没有名为 mercurial_keyring 的模块

我试图更改我的 mercurial.ini,以指定 mercurial_keyring.py 文件的路径,而不是让 mercurial 找到它(因为它在 PYTHONPATH 中)。

老的:

[extensions]
mercurial_keyring =

新的:

[extensions] mercurial_keyring =
c:/mercurial/extensions/mercurial_keyring.py

错误变为:

中止:无法导入模块密钥环!

因此,在提供 mercurial_keyring 扩展的路径时,仍然无法找到依赖的密钥环模块。

经过进一步调查,似乎没有扩展工作。它们都产生错误:

*** 导入扩展 [扩展名] 失败:没有名为 [模块名] 的模块

似乎在运行 hg.exe 时,它​​不知道 PYTHONPATH。我试过了:

  • Python 2.6.5 32 位
  • Python 2.6.5 64 位
  • 使用 MinGW 从源代码构建 Mercurial 1.5
  • 使用 MSVC9 从源代码构建 Mercurial 1.5
  • 使用 1.5 二进制 dist (.msi) 中的 hg.exe
  • 从源代码构建时使用 c:\python26\scripts 中的 hg.py
  • %userprofile%/mercurial.ini 中的各种配置
  • 使用 setuptools (easy_install.exe) 安装 keyring 和 mercurial_keyring
  • 从源代码构建密钥环和 mercurial_keyring (python setup.py bdist_wininst)

没有任何效果。我最接近的是从源代码构建时使用 hg.py 。它至少不会给我错误,并且在我输入凭据时实际上会创建 %userprofile%/wincrypto_pass.cfg 。但在后续请求中,它不会自动输入凭据。它再次提示我。

有趣的是,TortoiseHG正在使用钥匙圈。我只是无法让它在命令行上工作。我认为 Win 7 x64 出现了一些问题,阻止了 mercurial (hg.exe) 看到 PYTHONPATH,因此它找不到任何已安装的模块。

有没有人有在 Win 7 x64 中工作的扩展?特别是使用 mercurial 的二进制安装(不是 hg.py)?

更新 我现在找到了合适的解决方法。由于 TortoiseHG确实可以与 mercurial_keyring 一起使用,我只是更改了我的 PATH 设置以包含 tortoiseHG 文件夹,但不包含 c:\mercurial。现在,当我在命令行中键入“hg”时,它使用的是 tortoiseHG 文件夹中的 hg.exe,它工作正常。同样,这仍然是 Win 7 x64 上的 mercurial 扩展的问题。欢迎回答。

4

3 回答 3

18

用我之前的更新回答我自己的问题,因为还没有其他接受者。

合适的解决方法:由于 TortoiseHG确实与 mercurial_keyring 一起使用,我只是更改了我的 PATH 以包含tortoiseHG 文件夹,并排除c:\mercurial。现在,当我在命令行中键入“hg”时,它使用的是 tortoiseHG 文件夹中的 hg.exe,它与密钥环配合得很好。

于 2010-04-02T19:35:09.880 回答
4

我正在使用:

  • 在 Windows Server 2008 SP2 x86 上:
    • Python 2.6.5 x86
    • 水银 1.5.1 x86
    • 乌龟汞 1.0.1 x86
  • 在 Windows Server 2008 R2 上:
    • Python 2.6.5 x86
    • 水银 1.5.1 x86
    • 乌龟汞 1.0.1 x64

在这两种设置中,所有已配置的扩展都已加载且没有错误。

所有工具均使用其网站上提供的安装程序进行安装。Mercurial 出现在 PATH 中的 TortoiseHg 之前。我~/.hgrc为这两个工具使用了一个通用配置文件,以及Mercurial.iniTortoiseHg 安装文件夹中的一个文件,它只加载了mercurial_keyring扩展。

在命令行上,每次需要时我都必须输入密码,但在 TortoiseHg 的密钥环扩展中它完全可以工作。

从 Mercurial wiki 上的Keyring Extension页面:

如果您使用的是 Windows,我们建议您使用 TortoiseHg。THG 附带 Windows 特定的密钥环后端,没有它,mercurial-keyring 扩展无法在 Windows 上正常运行。

更新 http://asimilatorul.com/adapter/post/using-mercurial_keyring-extension-with-mercurial-on-windows/

您可以将 TortoiseHg 的library.zip中的所需文件复制到 Mercurial 的library.zip中:

  • hgext\mercurial_keyring.pyo
  • 钥匙圈__init__.pyo
  • 密钥环\后端.pyo
  • 钥匙圈\core.pyo
  • win32_crypto.pyd
于 2010-04-04T21:02:15.563 回答
4

扩展页面指出 TortoiseHG 有一些额外的组件可以使其在 Windows 上运行,并且没有它们就无法正常工作。听起来引用 TortoiseHG 版本的解决方法可能是让它在 Windows 上运行的最简单方法。

于 2011-12-19T16:25:52.007 回答