Как правильно установить dulwich, чтобы hg-git работал в Windows? - PullRequest
50 голосов
/ 02 марта 2010

Я пытаюсь использовать расширение hg-git Mercurial в Windows (Windows 7 64-bit, если быть точным). У меня установлены Mercurial и Git. У меня установлен Python 2.5 (32-разрядный).

Я следовал инструкциям на http://hg -git.github.com / , чтобы установить расширение. Начальная установка easy_install не удалась, поскольку не удалось скомпилировать dulwich без 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, это происходит успешно (так как зависимость Дульвича удовлетворяется).

В моем 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. Я клонировал репозиторий и изменил файл расширений так:

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

Теперь, когда я запускаю hg, я вижу: *** не удалось импортировать расширение hggit из c: \ code \ hg-git \ hggit: ни один модуль с именем dulwich.errors.

Хорошо, это говорит мне о том, что сейчас он находит hggit, потому что я вижу в hg-git \ hggit \ git_handler.py, что он вызывает

from dulwich.errors import HangupException

Это заставляет меня думать, что Дульвич установлен неправильно или не в пути.

Обновление:

Из командной строки 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 может его найти. Что я могу сделать с этой информацией?

Ответы [ 9 ]

16 голосов
/ 29 апреля 2010

Это заставляет меня думать, что Далвич не установлен правильно или нет в путь.

Ты абсолютно прав. Двоичные дистрибутивы Mercurial для Windows «заморожены» - они используют код и интерпретатор Python, связанные с ними, и поэтому не зависят от пакетов, установленных в системе PYTHONPATH. Когда вы указываете путь к расширению hggit в Mercurial.ini, hg пытается импортировать его, используя прямой путь, но библиотека dulwich не импортируется явно hg и не связывается с его библиотекой, поэтому импорт завершается неудачей.

Можно добавить как Dulwich, так и HgGit в library.zip, который устанавливается вместе с hg.exe, но для меня лучший способ - установить все из исходного кода, включая Mercurial, и выполнить команды с использованием файлов .bat, установленных в \ Python \ Scripts. В этом случае вам необходимо:

  1. Установить Mercurial из источника. Это создает «чистую» версию, потому что пользователи Windows обычно не имеют Visual Studio или альтернативного компилятора для компиляции ускорений C.
  2. Установить Dulwich - я бы использовал последний ствол снимок для Git и Dulwich.

    python setup.py --pure install

  3. Установить последнюю версию HgGit снимок

    python setup.py install

  4. Отредактируйте Mercurial.ini, чтобы включить hggit =

  5. Запустите Mercurial, используя ваш \ Python \ Scripts \ hg.bat
10 голосов
/ 09 августа 2011

Я нашел более простое решение на http://candidcode.com/2010/01/12/a-guide-to-converting-from-mercurial-hg-to-git-on-a-windows-client/

А потом я сам нашел еще более простое решение:

Чтобы использовать расширение hg-git Mercurial в Windows:

  1. установить официальные бинарные файлы Mercurial
  2. положить папку с Далвичем из источников Dulwich и папки HGGIT из источников HG-GIT в корень файла library.zip в папке установки Mercurial
  3. добавить следующее в% USERPROFILE% \ Mercurial.ini:

[extensions]
hgext.bookmarks=
hggit=

Для поддержки SSH необходим plink.exe из семейства PuTTY. После этого вы должны добавить в 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.

8 голосов
/ 02 апреля 2010

Если вы можете установить TortoiseHg, он включает Дулвич и другие требования.

4 голосов
/ 24 марта 2010

Попробуйте следующую конфигурацию (измените свой путь), которая работает для меня:

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

В моем случае, когда у меня есть пустое значение для hggit =, я получаю ту же ошибку, что и вы в этом случае. Но я могу import dulwich без проблем в оболочке python, поэтому вам следует проверить easy-install.pth (как указал Дэвид), если он содержит dulwich-0.5.0-py2.5.egg. Я также установил чистую версию dulwich.

0 голосов
/ 01 февраля 2016

Я также получил эту ошибку даже после загрузки последней версии Tortoisehg и убедившись, что плагин hggit установлен, а мои файлы .ini & hgrc имеют правильную запись для включения hggit.

Оказывается, моя проблема заключалась в том, что у меня на пути были и ртутный, и черепаховый. Поэтому когда я запускал какие-либо команды hg, он использовал hg.exe в папке mercurial, а не hg.exe в каталоге torsoisehg.

Это имеет смысл, но у моей ртутной установки не было плагинов. Мое исправление состояло в том, чтобы удалить mercurial из моего пути, чтобы команды hg проходили через каталог tortoisehg, поскольку он полностью связан с hg. Однако обратите внимание, что рекомендуемый вариант может состоять в обновлении mercurual до версии, в которой есть плагины, которые нужны, но это то, что мне помогло. Я попытался заменить файл library.zip в Mercurial на Tortoisehg, и это сработало, но это привело к другим ошибкам, как можно себе представить.

@ Ответ techtonik привел меня по этому пути, за что я благодарен.

Напомним: проверьте, какой hg exe выполняет ваши команды hg, проверив ваш путь, потому что hg.exe не находит подключаемые модули по какой-либо причине.

0 голосов
/ 22 января 2014

Основываясь на объяснении techtonik о причине неудачного импорта dulwich.errors, я нашел решение, которое кажется мне более простым, чем уже предложенные:

На странице загрузки Mercurial предлагается

Mercurial <x.y.z> для Python 2.7 в Windows x86 (исходная установка)

и

Mercurial <x.y.z> для Python 2.7 в Windows x64 (исходная установка)

как .EXE файлы, которые устанавливают Mercurial как модуль Python в существующую установку Python 2.7 (x86 или x64).

Если hg-git и dulwich были установлены и для этой установки Python, ошибки импорта должны исчезнуть.

Если вы не уверены, что делать сейчас, надеюсь, это пошаговое объяснение поможет:

Предпосылки

  • Python 2.7 установлен
  • <python 2.7 install dir> и <python 2.7 install dir>\Scripts находятся в переменной окружения PATH
  • hg-git (и dulwich) были установлены в этой установке Python по инструкциям здесь

Steps

  1. Удалите все существующие установки Mercurial
  2. Загрузите и установите один из приведенных выше EXE-файлов, в зависимости от того, является ли установка Python 2.7 32-битной или 64-битной (если вы получаете сообщение об ошибке «Python 2.7 не может быть найден в реестре», вам, вероятно, нужен другой)

Теперь hg clone <some git repo> должно работать на консоли.

0 голосов
/ 14 августа 2013

sudo apt-get install python-dev # Дам, ты зависим!

sudo easy_install dulwich

Успех!

0 голосов
/ 22 ноября 2010

Я столкнулся с этой проблемой и с dulwich.errors. Вместо того, чтобы устанавливать все с нуля. Я просто скопировал dulwich из моих стандартных пакетов сайтов в пакеты mercurial site-packages. работал без проблем.

0 голосов
/ 12 марта 2010

Пока вы не получите import dulwich на работу, hggit не будет работать. Убедитесь, что файл dulwich egg находится в вашем easy-install.pth файле под site-packages.

Для дальнейшей отладки вы можете попробовать спросить pkg_resources об этом:

import pkg_resources
pkg_resources.require("dulwich")
...