如何正确安装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文件执行命令。 在这种情况下,您需要:
- 从源代码安装Mercurial 。 这样就构build了“纯粹”版本,因为Windows用户通常没有用于编译C加速的Visual Studio或其他编译器。
-
安装德威 – 我会用Git和Dulwich的最新的主干快照 。
python setup.py – 纯安装
-
安装最新的HgGit 快照
python setup.py安装
-
编辑Mercurial.ini以启用
hggit =
- 使用\ Python \ Scripts \ hg.bat启动Mercurial
然后我自己find了一个更简单的解决scheme:
在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并尝试使用它连接。 它会将服务器密钥指纹添加到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安装中
脚步
- 卸载任何现有的Mercurial安装
- 下载并安装以上引用的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德威
成功!