如何正确安装dulwich来获得hg-git在Windows上的工作?

我试图在Windows上使用hg-git Mercurial扩展(Windows 7 64位,具体)。 我安装了Mercurial和Git。 我有Python 2.5(32位)安装。

我按照http://hg-git.github.com/上的说明安装扩展。 最初的easy_install失败了,因为无法在没有Visual Studio 2003的情况下编译dulwich。

我手动安装dulwich:

  • git clone git://git.samba.org/jelmer/dulwich.git
  • cd德威
  • c:\ Python25 \ python setup.py –pure install

现在,当我运行easy_install hg-git时,它成功了(因为dulwich依赖性得到满足)。

在我的C:\用户\用户名\ Mercurial.ini,我有:

[extensions] hgext.bookmarks = hggit = 

当我在命令提示符下键入'hg'时,我看到:“***未能导入扩展名hggit:没有名为hggit的模块”

看看我的c:\ Python25文件夹,我看到的唯一参考hggit是Lib\site-packages\hg_git-0.2.1-py2.5.egg 。 这应该是提取的地方,或者它应该工作吗?

由于失败了,我尝试了gg-git页面的“更多参与”指令,提示克隆git://github.com/schacon/hg-git.git并在我的Mercurialconfiguration中引用该path。 我克隆了回购,并更改我的扩展文件,如下所示:

 [extensions] hgext.bookmarks = hggit = c:\code\hg-git\hggit 

现在当我运行hg时,我看到:***无法从c:\ code \ hg-git \ hggit中导入扩展名hggit:没有名为dulwich.errors的模块。

好的,所以这个告诉我现在find了hggit,因为我可以在hg-git \ hggit \ git_handler.py中看到它调用

 from dulwich.errors import HangupException 

这使得我认为德威安装不正确,或不在path中。

更新:

从Python命令行:

 import dulwich 

产生Import Error: No module named dulwich

但是,在C:\ Python25 \ Lib \ site-packages下,我确实有一个dulwich-0.5.0-py2.5.egg文件夹,这个文件夹似乎已经被填充了。 这是由上述步骤创build的。 是否需要执行额外的步骤才能使其成为Python“path”的一部分?

从Python命令行(如其中一个答案中所build议的):

 import pkg_resources pkg_resources.require('dulwich') 

yield [dulwich 0.5.0 (c:\python25\lib\site-packages\dulwich-0.5.0-py2.5.egg)]

那么这是告诉我什么? 导入德威失败,但显然pkg_resources可以find它。 我能用这些信息做什么?

这使得我认为德威安装不正确,或不在path中。

你是绝对正确的。 Windows的Mercurial二进制发行版是“冻结的” – 它们使用与它们捆绑在一起的Python代码和解释器,因此独立于安装在系统PYTHONPATH中的软件包。 当您在Mercurial.ini中指定hggit扩展名的path时,hg会尝试使用直接path导入它,但dulwich库不会被hg显式导入,也不会与其库绑定,因此导入失败。

可以将Dulwich和HgGit添加到与hg.exe一起安装的library.zip中,但对于我来说,最好的方法是安装包括Mercurial在内的所有源代码,并使用安装在\ Python \ Scripts中的.bat文件执行命令。 在这种情况下,您需要:

  1. 从源代码安装Mercurial 。 这样就构build了“纯粹”版本,因为Windows用户通常没有用于编译C加速的Visual Studio或其他编译器。
  2. 安装德威 – 我会用Git和Dulwich的最新的主干快照 。

    python setup.py – 纯安装

  3. 安装最新的HgGit 快照

    python setup.py安装

  4. 编辑Mercurial.ini以启用hggit =

  5. 使用\ Python \ Scripts \ hg.bat启动Mercurial

我在http://candidcode.com/2010/01/12/a-guide-to-converting-from-mercurial-hg-to-git-on-a-windows-client/上find了一个更简单的解决scheme

然后我自己find了一个更简单的解决scheme:

在Windows上使用hg-git Mercurial扩展:

  1. 安装官方的Mercurial二进制文件
  2. 将dulwich文件夹中的dulwich文件夹和hg-git源文件中的hggit文件夹放到Mercurial安装文件夹中的library.zip的根目录下
  3. 将以下内容添加到%USERPROFILE%\ Mercurial.ini:

 [extensions] hgext.bookmarks= hggit= 

要获得SSH支持,您需要使用PuTTY系列的plink.exe。 之后,你应该添加以下内容到Mercurial.ini:

 [ui] username = John Doe <foo@example.com> ssh=d:/home/lib/dll/plink.exe -i "d:/home2/ssh-private-key.ppk" 

当第一次连接到SSH服务器时,您应该启动putty.exe并尝试使用它连接。 它会将服务器密钥指纹添加到registry中。 否则,plink会要求您接受指纹,但不接受任何input。

您可以使用puttygen.exe生成私钥。 使用不带密码的密钥或使用Pageant.exe ssh身份validation代理。

如果你可以安装TortoiseHg,它包括德威和其他要求。

尝试下面的configuration(改变你的path),这对我有用:

 [extensions] ; hg-git extention hgext.bookmarks = hggit = C:\Python26\Lib\site-packages\hg_git-0.2.1-py2.6.egg\hggit 

在我的情况下,当我对hggit =有空值的hggit = ,在这种情况下,我得到了和上面一样的错误。 但是我可以在python shell中没有问题的情况下import dulwich ,所以你应该检查你的easy-install.pth (如David指出的那样)是否包含dulwich-0.5.0-py2.5.egg 。 我也安装了纯粹的dulwich版本。

直到你得到import dulwich hggit工作, hggit将无法正常工作。 检查dulwich蛋文件是否位于site-packages下的easy-install.pth文件中。

要进一步debugging,可以尝试询问pkg_resources

 import pkg_resources pkg_resources.require("dulwich") 

我用dulwich.errors也遇到了这个问题。 而不是从头开始安装所有东西。 我只是从我的默认网站包复制德威到mercurial网站包。 没有问题的工作。

根据techtonik 解释导致dulwich.errors失败的原因,我发现了一个比我已经提出的更简单的解决scheme:

在Mercurial下载页面上提供

Windows x86上的Python 2.7的Mercurial <xyz> (源代码安装)

用于Windows x64上的Python 2.7的Mercurial <xyz> (源代码安装)

作为将Mercurial作为Python模块安装到现有Python 2.7(x86或x64)安装中的.EXE文件。

如果hg-git和dulwich已经安装到这个Python安装中,那么导入错误应该会消失。

如果您不确定现在要做什么,我希望这个一步一步的解释有助于:

先决条件

  • Python 2.7被安装
  • <python 2.7 install dir><python 2.7 install dir>\Scripts位于PATH环境variables中
  • hg-git(和dulwich)已经通过这里的说明安装到这个Python安装中

脚步

  1. 卸载任何现有的Mercurial安装
  2. 下载并安装以上引用的EXE文件之一,取决于你的Python 2.7安装是32位还是64位(如果你得到“Python 2.7无法在registry中find”的错误,你可能需要另一个。)

现在, hg clone <some git repo>应该在控制台上工作。

即使下载了最新的Tortoisehg并确保安装了hggit插件以及我的.ini&hgrc文件有正确的条目来启用hggit,我也遇到了这个错误。

原来我的问题是,我的路上既有水银,又有乌龟。 所以当我运行任何hg命令时,它使用的是mercurial文件夹中的hg.exe,而不是torsoisehg目录中的hg.exe。

这是有道理的,但我的mercurial安装没有插件。 我的修补程序是从我的path中删除汞,所以汞命令通过tortoisehg目录,因为它已经完全捆绑了汞。 但是请注意,build议的选项可能是将mercurual升级到具有所需插件的版本,但是这对我来说是有用的。 我尝试用tortoisehg中的库replace库中的library.zip,这个工作正常,但是却导致了其他的错误。

@ techtonik的回答使我走上了这条感恩之路。

回顾一下:通过检查你的path来validation哪个hg exe运行你的hg命令,因为hg.exe不pipe什么原因都没有find插件。

sudo apt-get安装python-dev#保护你的依赖!

sudo easy_install德威

成功!