如何在Windows上正确安装dulwich以使hg-git工作?
我在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 dulwich
- c:\Python25\python setup.py --pure install
现在当我运行easy_install hg-git时,它成功了(因为dulwich的依赖关系已经满足)。
在我的C:\Users\username\Mercurial.ini文件中,我有:
[extensions]
hgext.bookmarks =
hggit =
当我在命令提示符下输入'hg'时,我看到:
"*** failed to import extension hggit: No module named 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配置中引用这个路径。我克隆了这个仓库,并把我的扩展文件改成了:
[extensions]
hgext.bookmarks =
hggit = c:\code\hg-git\hggit
现在当我运行hg时,我看到:*** failed to import extension hggit from c:\code\hg-git\hggit: No module named 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可以找到它。我可以用这些信息做些什么呢?
11 个回答
如果你能安装TortoiseHg,它里面已经包含了dulwich和其他需要的东西。
我在这个网站上找到了一个更简单的解决方案:http://candidcode.com/2010/01/12/a-guide-to-converting-from-mercurial-hg-to-git-on-a-windows-client/
然后我自己又找到了一个更简单的方法:
在Windows上使用hg-git这个Mercurial扩展:
- 安装官方的Mercurial软件包
- 把来自dulwich源代码的dulwich文件夹和来自hg-git源代码的hggit文件夹放到Mercurial安装文件夹中的library.zip的根目录下
- 在%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并尝试连接。这样会把服务器的密钥指纹添加到注册表中。否则,plink会要求你接受这个指纹,但它不会接受任何输入。
你可以使用puttygen.exe来生成私钥。可以选择不带密码的密钥,或者使用Pageant.exe这个SSH认证代理。
这让我觉得 dulwich 可能没有正确安装,或者没有在路径中。
你说得对。Windows 上的 Mercurial 二进制版本是“冻结”的——它们使用的是自带的 Python 代码和解释器,因此和系统中的 PYTHONPATH 里安装的包没有关系。当你在 Mercurial.ini 文件中指定 hggit 扩展的路径时,hg 会尝试直接用这个路径来导入它,但 dulwich 库并不是 hg 明确导入的,也没有和它的库一起打包,所以导入失败了。
可以把 Dulwich 和 HgGit 都放进和 hg.exe 一起安装的 library.zip 里,但对我来说,最好的办法是从源代码安装所有东西,包括 Mercurial,然后使用安装在 \Python\Scripts 里的 .bat 文件来执行命令。在这种情况下,你需要:
- 从源代码安装 Mercurial。这样会构建一个“纯”版本,因为 Windows 用户通常没有 Visual Studio 或其他编译器来编译 C 语言的加速代码。
安装 Dulwich - 我会使用最新的主干 快照,适用于 Git 和 Dulwich。
运行命令:python setup.py --pure install
安装最新的 HgGit 快照
运行命令:python setup.py install
编辑 Mercurial.ini 文件以启用
hggit =
- 通过你的 \Python\Scripts\hg.bat 启动 Mercurial