How do I correctly install dulwich to get hg-git working on Windows?
Solution 1
That makes me think dulwich is not installed correctly, or not in the path.
You're absolutely right. Mercurial binary distributions for Windows are 'frozen' - they use the Python code and interpreter bundled with them and therefore independent of packages installed in system PYTHONPATH. When you specify path to hggit extension in Mercurial.ini, hg tries to import it using direct path, but dulwich library is not imported explicitly by hg and doesn't bundled with its library, so the import fails.
It is possible to add both Dulwich and HgGit into library.zip that is installed along with hg.exe, but for me the best way is to install everything from source including Mercurial and execute commands using .bat files installed into \Python\Scripts. In this case you will need to:
- Install Mercurial from source. This builds "pure" version, because Windows users usually don't have Visual Studio or alternative compiler for compiling C speedups.
-
Install Dulwich - I'd use latest trunk snapshot for both Git and Dulwich.
python setup.py --pure install
-
Install latest HgGit snapshot
python setup.py install
Edit Mercurial.ini to enable
hggit =
- Launch Mercurial using your \Python\Scripts\hg.bat
Solution 2
I found a simpler solution at http://candidcode.com/2010/01/12/a-guide-to-converting-from-mercurial-hg-to-git-on-a-windows-client/
And then I found a yet simpler solution myself:
To use the hg-git Mercurial extension on Windows:
- install the official Mercurial binaries
- put dulwich folder from dulwich sources and hggit folder from hg-git sources to the root of library.zip in Mercurial installation folder
- add the following to %USERPROFILE%\Mercurial.ini:
[extensions]
hgext.bookmarks=
hggit=
To have SSH support you need plink.exe from PuTTY family. After that you should add the following to Mercurial.ini:
[ui]
username = John Doe <[email protected]>
ssh=d:/home/lib/dll/plink.exe -i "d:/home2/ssh-private-key.ppk"
When connecting to a SSH server for the first time, you should start putty.exe and try to connect using it. It will add the server key fingerprint to the registry. Otherwise plink will ask you to accept the fingerprint but it doesn't accept any input.
You can use puttygen.exe to generate private keys. Either use keys without a passphrase or use Pageant.exe ssh authentication agent.
Solution 3
If you can install TortoiseHg, it includes dulwich and other requirements.
Solution 4
Try following configuration (change to your path), which works for me:
[extensions]
; hg-git extention
hgext.bookmarks =
hggit = C:\Python26\Lib\site-packages\hg_git-0.2.1-py2.6.egg\hggit
In my case when I have empty value for hggit =
, I get the same error as you do in this case. But I can import dulwich
without problem in python shell, so you should check your easy-install.pth
(as pointed out by David) if it contains dulwich-0.5.0-py2.5.egg
.
I did install pure version of dulwich
as well.
Solution 5
Had this problem today when installing the latest TortoiseHg.
Get the latest python 2.7 (I used 2.7.16) setup on your system, you probably have this already. Get a command window and go to the c:\Python27 folder To run pip use Scripts\pip or easy_install use Scripts\easy_install Try pip -V to make sure you get the 2.7 version and not some 3.X version
Wrong:
c:\Python27>pip -V
pip 20.2.4 from c:\python38\lib\site-packages\pip (python 3.8)
Right:
c:\Python27>Scripts\pip -V
pip 20.2.4 from c:\python27\lib\site-packages\pip (python 2.7)
If dulwich or hg-git are installed already
Scripts\pip uninstall dulwich
Scripts\pip uninstall hg-git
Install hg-git
Scripts\easy_install install hg-git
You should now have two folders
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
It will only work if Dulwich is version 0.19.16 (less than 0.20.x)
Copy these folders (dulwich and hggit) into the zip-file C:\Program Files\TortoiseHg\lib\library.zip
Joshua Flanagan
Member of open source project teams: ruby resque-clues redis_mail .NET StructureMap FubuMVC
Updated on June 06, 2022Comments
-
Joshua Flanagan almost 2 years
I'm trying to use the hg-git Mercurial extension on Windows (Windows 7 64-bit, to be specific). I have Mercurial and Git installed. I have Python 2.5 (32-bit) installed.
I followed the instructions on http://hg-git.github.com/ to install the extension. The initial easy_install failed because it was unable to compile dulwich without Visual Studio 2003.
I installed dulwich manually by:
- git clone git://git.samba.org/jelmer/dulwich.git
- cd dulwich
- c:\Python25\python setup.py --pure install
Now when I run easy_install hg-git, it succeeds (since the dulwich dependency is satisfied).
In my C:\Users\username\Mercurial.ini, I have:
[extensions] hgext.bookmarks = hggit =
When I type 'hg' at a command prompt, I see: "*** failed to import extension hggit: No module named hggit"
Looking under my c:\Python25 folder, the only reference to hggit I see is
Lib\site-packages\hg_git-0.2.1-py2.5.egg
. Is this supposed to be extracted somewhere, or should it work as-is?Since that failed, I attempted the "more involved" instructions from the hg-git page that suggested cloning git://github.com/schacon/hg-git.git and referencing the path in my Mercurial configuration. I cloned the repo, and changed my extensions file to look like:
[extensions] hgext.bookmarks = hggit = c:\code\hg-git\hggit
Now when I run hg, I see: *** failed to import extension hggit from c:\code\hg-git\hggit: No module named dulwich.errors.
Ok, so that tells me that it is finding hggit now, because I can see in hg-git\hggit\git_handler.py that it calls
from dulwich.errors import HangupException
That makes me think dulwich is not installed correctly, or not in the path.
Update:
From Python command line:
import dulwich
yields
Import Error: No module named dulwich
However, under C:\Python25\Lib\site-packages, I do have a dulwich-0.5.0-py2.5.egg folder which appears to be populated. This was created by the steps mentioned above. Is there an additional step I need to take to make it part of the Python "path"?
From Python command line (as suggested in one of the answers):
import pkg_resources pkg_resources.require('dulwich')
yields
[dulwich 0.5.0 (c:\python25\lib\site-packages\dulwich-0.5.0-py2.5.egg)]
So what does that tell me? Importing dulwich fails, but apparently pkg_resources can find it. What can I do with that information?