Mercurial扩展在Windows 7 x64上无法工作?

15
我们在工作中测试使用 Mercurial。 我们不想每次与存储库交互时都必须输入用户名和密码,因此我们设置了 mercurial_keyring 扩展。 我们:
  • 安装了 Python 2.6.5(32位或64位,取决于系统)
  • 安装了 setuptools(用于 easy_install.exe)
  • easy_install keyring
  • easy_install mercurial_keyring
然后在 %userprofile%/mercurial.ini 文件的 [auth] 部分进行了适当的更改。 它在我同事的计算机上正常运行(32位 xp sp3),但在我的计算机上(Windows 7 Ultimate x64)无法正常工作。 值得注意的是,在 Win 7 x64 上必须从源代码构建 setuptools(即python setup.py bdist_wininst,然后运行生成的setuptools-0.6c11.win-amd64.exe)。
当我仅使用 Mercurial 1.5 二进制安装包中的 hg.exe 时,运行 hg.exe 时会出现以下错误:

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

我尝试更改我的 mercurial.ini,指定 mercurial_keyring.py 文件的路径,而不是让 mercurial 自己找到它(因为它在 PYTHONPATH 中)。
旧内容:
[extensions]
mercurial_keyring =

新内容:

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

错误信息变成了:

中止: 无法导入模块keyring!

因此,虽然提供mercurial_keyring扩展的路径是可行的,但仍然找不到依赖的keyring模块。

进一步调查后发现,所有扩展都不起作用。 它们都会产生以下错误:

*** 导入扩展名[扩展名]失败:找不到模块[模块名]

当运行hg.exe时,它似乎不知道PYTHONPATH。我尝试过:

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

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

有趣的是,TortoiseHG正在使用keyring。我只是无法在命令行上让它工作。我认为在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扩展的问题。欢迎回答。

3个回答

19

针对我之前的更新中自问自答的问题,由于还没有其他人参与,我来回答一下。

适合的解决方法:由于TortoiseHG与mercurial_keyring兼容,我只需将我的PATH更改为包含tortoiseHG文件夹,而排除c:\mercurial。现在,当我在命令行中键入“hg”时,它会使用tortoiseHG文件夹中的hg.exe,这可以与keyring很好地配合使用。


C:\Program Files\TortoiseHg was present in the PATH, although I had to remove another Mercurial version from it: c:\Program Files\Mercurial - Kurt Van den Branden

4
我正在使用以下工具:
  • 在 Windows Server 2008 SP2 x86 上:
    • Python 2.6.5 x86
    • Mercurial 1.5.1 x86
    • TortoiseHg 1.0.1 x86
  • 在 Windows Server 2008 R2 上:
    • Python 2.6.5 x86
    • Mercurial 1.5.1 x86
    • TortoiseHg 1.0.1 x64
在这两个设置中,所有配置的扩展都没有错误地加载。
所有工具都是使用它们网站上提供的安装程序安装的。Mercurial 在 PATH 中出现在 TortoiseHg 之前。我正在使用一个通用配置文件 ~/.hgrc 来为这两个工具进行配置,并且在 TortoiseHg 安装文件夹中有一个 Mercurial.ini 文件,该文件仅加载 mercurial_keyring 扩展。
在命令行中,每次需要密码时都必须输入密码,但在 TortoiseHg 中,keyring 扩展完全正常工作。

来自Mercurial维基上的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
  • keyring__init__.pyo
  • keyring\backend.pyo
  • keyring\core.pyo
  • win32_crypto.pyd

我知道keyring扩展可以与TortoiseHg一起使用。它不能与从Mercurial安装中安装的hg.exe一起使用,因为当执行该hg.exe时,它似乎无法看到PYTHONPATH,并且找不到任何扩展。由于您在Mercurial.ini中加载了keyring扩展,该文件仅适用于TortoiseHG,因此您不会尝试使用mercurial hg.exe加载它。尝试将扩展添加到Server 2008 R2机器上的~/.hgrc中,看看是否有效。这就是问题所在。 - Samuel Meacham
我的设置的整个目的是仅为TortoiseHg加载钥匙环。但是,所有其他扩展在WS2008 R2 x64上与Mercurial一起正常工作(应该像Win 7 x64一样运行)。 - alexandrul

4

该拓展页面指出,TortoiseHG在Windows平台上需要一些额外的组件才能正常工作,否则可能会发生故障。参考TortoiseHG版本可能是在Windows上使用它的最简单方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接