如何正确安装dulwich以使hg-git在Windows上运行?

时间:2010-03-02 04:40:47

标签: python windows mercurial hg-git dulwich

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

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

我手动安装了德威:

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

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

在我的C:\ Users \ username \ Mercurial.ini中,我有:

[extensions]
hgext.bookmarks =
hggit =

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

在我的c:\ Python25文件夹下查看,我看到的对hggit的唯一引用是Lib\site-packages\hg_git-0.2.1-py2.5.egg。这应该被提取到某个地方,还是应该按原样运作?

由于失败了,我尝试了hg-git页面中的“更多参与”指令,建议克隆git://github.com/schacon/hg-git.git并引用我的Mercurial配置中的路径。我克隆了repo,并将我的扩展文件更改为:

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

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

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

from dulwich.errors import HangupException

这让我觉得dulwich没有正确安装,或者没有安装在路径中。

更新

从Python命令行:

import dulwich

收益Import Error: No module named dulwich

但是,在C:\ Python25 \ Lib \ site-packages下,我有一个似乎已填充的dulwich-0.5.0-py2.5.egg文件夹。这是由上述步骤创建的。我需要采取额外的步骤使其成为Python“路径”的一部分吗?

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

import pkg_resources
pkg_resources.require('dulwich')

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

那告诉我什么?导入dulwich失败,但显然pkg_resources可以找到它。我该怎么处理这些信息?

10 个答案:

答案 0 :(得分:16)

  

这让我觉得德威不是   安装正确,或不在   路径。

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

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

    来自来源的
  1. Install Mercurial。这构建了“纯”版本,因为Windows用户通常没有Visual Studio或替代编译器来编译C加速。
  2. 安装德威 - 我会为Git和Dulwich使用最新的主干snapshot

    python setup.py --pure install

  3. 安装最新的HgGit snapshot

    python setup.py install

  4. 修改Mercurial.ini以启用hggit =

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

答案 1 :(得分:10)

我在http://candidcode.com/2010/01/12/a-guide-to-converting-from-mercurial-hg-to-git-on-a-windows-client/

找到了一个更简单的解决方案

然后我自己找到了一个更简单的解决方案:

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

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

  4. [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并尝试使用它进行连接。它会将服务器密钥指纹添加到注册表。否则plink会要求您接受指纹,但它不接受任何输入。

    您可以使用puttygen.exe生成私钥。使用没有密码短语的密钥或使用Pageant.exe ssh身份验证代理。

答案 2 :(得分:8)

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

答案 3 :(得分:4)

尝试以下配置(更改路径),这对我有用:

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

在我的情况下,当hggit =为空值时,我会得到与此情况相同的错误。但我可以{python shell中import dulwich没有问题,所以如果它包含easy-install.pth,你应该检查你的dulwich-0.5.0-py2.5.egg(正如大卫所指出的那样)。 我也安装了dulwich的纯版本。

答案 4 :(得分:0)

import dulwich开始工作之前,hggit将不起作用。检查dulwich鸡蛋文件是否在easy-install.pth下的site-packages文件中。

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

import pkg_resources
pkg_resources.require("dulwich")

答案 5 :(得分:0)

我也遇到了dulwich.errors这个问题。而不是从头开始安装一切。我只是将dulwich从我的默认站点包复制到了mercurial站点包。工作没有问题。

答案 6 :(得分:0)

基于techtonik explanation导致dulwich.errors导入失败的原因,我找到了一个比我已经提出的解决方案更简单的解决方案:

Mercurial download page上提供了

  

Windows x86上的Python 2.7的Mercurial <x.y.z>(源代码安装)

  

Windows x64上的Python 2.7的Mercurial <x.y.z>(源代码安装)

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

如果已经在此Python安装中安装了hg-git和dulwich,导入错误应该会消失。

如果您不确定现在该做什么,我希望这个循序渐进的解释有所帮助:

的先决条件

  • 已安装Python 2.7
  • <python 2.7 install dir><python 2.7 install dir>\Scripts位于PATH环境变量
  • hg-git(和dulwich)已通过here
  • 的说明安装到此Python安装中

的步骤

  1. 卸载任何现有的Mercurial安装
  2. 下载并安装上述引用的EXE文件之一,具体取决于您的Python 2.7安装是32位还是64位(如果您在“注册表中找不到Python 2.7”错误,则可能需要另一个。)
  3. 现在hg clone <some git repo>可以在控制台上运行。

答案 7 :(得分:0)

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

原来我的问题是我的道路上既有善变也有玳瑁。因此,当我运行任何hg命令时,它使用的是mercurial文件夹中的hg.exe而不是torsoisehg目录中的hg.exe。

这是有道理的,但我的mercurial安装没有插件。我的修复是从我的路径中删除mercurial所以hg命令通过tortoisehg目录,因为它已完全捆绑了hg。但是请注意,建议的选项可能是将mercurual升级到具有所需插件的版本,但这对我有用。我尝试将mercurial中的library.zip替换为tortoisehg中的一个,这样可行,但它会导致其他错误。

@ techtonik的回答让我走上了这条路,我很感激。

回顾:通过检查路径来验证哪个hg exe正在运行你的hg命令,因为hg.exe因为某种原因找不到插件。

答案 8 :(得分:0)

今天在安装最新的TortoiseHg时遇到了这个问题。

在您的系统上获取最新的python 2.7(我使用2.7.16)设置,您可能已经拥有了。 获取命令窗口并转到c:\ Python27文件夹 要运行pip,请使用Scripts \ pip或easy_install使用Scripts \ easy_install 尝试使用pip -V来确保获得2.7版本而不是3.X版本

错误:

c:\Python27>pip -V
pip 20.2.4 from c:\python38\lib\site-packages\pip (python 3.8)

右:

c:\Python27>Scripts\pip -V
pip 20.2.4 from c:\python27\lib\site-packages\pip (python 2.7)

如果已经安装了dulwich或hg-git

Scripts\pip uninstall dulwich
Scripts\pip uninstall hg-git

安装hg-git

Scripts\easy_install install hg-git

您现在应该有两个文件夹

C:\Python27\Lib\site-packages\dulwich-0.19.16-py2.7-win-amd64.egg\dulwich
C:\Python27\Lib\site-packages\hg_git-0.9.0-py2.7.egg\hggit

仅当Dulwich版本为0.19.16(小于0.20.x)时才有效

将这些文件夹(dulwich和hggit)复制到zip文件中 C:\ Program Files \ TortoiseHg \ lib \ library.zip

folder in zip file

答案 9 :(得分:-2)

  

sudo apt-get install python-dev#Dam you dependency!

     

sudo easy_install dulwich

成功!