Как правильно установить dulwich, чтобы hg-git работал в Windows?
Я пытаюсь использовать расширение 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 Далвич
- 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. Я клонировал репозиторий и изменил файл расширений, чтобы он выглядел так:
[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 может его найти. Что я могу сделать с этой информацией?
11 ответов
Это заставляет меня думать, что Далвич не установлен правильно, или не в пути.
Вы абсолютно правы. Двоичные дистрибутивы Mercurial для Windows "заморожены" - они используют код и интерпретатор Python, связанные с ними, и поэтому не зависят от пакетов, установленных в системе PYTHONPATH. Когда вы указываете путь к расширению hggit в Mercurial.ini, hg пытается импортировать его, используя прямой путь, но библиотека dulwich не импортируется явно hg и не связывается с ее библиотекой, поэтому импорт завершается неудачно.
Можно добавить как Dulwich, так и HgGit в library.zip, который устанавливается вместе с hg.exe, но для меня лучший способ - установить все из исходного кода, включая Mercurial, и выполнить команды с использованием файлов.bat, установленных в \Python\Scripts. В этом случае вам необходимо:
- Установите Mercurial из источника. Это создает "чистую" версию, потому что пользователи Windows обычно не имеют Visual Studio или альтернативного компилятора для компиляции ускорений Си.
Установите Dulwich - я бы использовал последний снимок ствола для Git и Dulwich.
python setup.py --pure install
Установите последний снимок HgGit
Python setup.py установить
Отредактируйте Mercurial.ini, чтобы включить
hggit =
- Запустите Mercurial, используя ваш \Python\Scripts\hg.bat
Я нашел более простое решение на http://candidcode.com/2010/01/12/a-guide-to-converting-from-mercurial-hg-to-git-on-a-windows-client/
И тогда я сам нашел еще более простое решение:
Чтобы использовать расширение hg-git Mercurial в Windows:
- установить официальные бинарные файлы Mercurial
- положить папку dulwich из исходников dulwich и папку hggit из исходников hg-git в корень library.zip в папке установки Mercurial
- добавьте следующее в%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 для генерации закрытых ключей. Либо используйте ключи без ключевой фразы, либо используйте агент аутентификации Pagesh.exe ssh.
Если вы можете установить TortoiseHg, он включает в себя Dulwich и другие требования.
Попробуйте следующую конфигурацию (измените свой путь), которая работает для меня:
[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
также.
Была эта проблема сегодня при установке последней версии 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
Я также получил эту ошибку даже после загрузки последней версии 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 не находит подключаемые модули по какой-либо причине.
На основании объяснения Techtonik причины неудачного импорта dulwich.errors
Я нашел решение, которое кажется мне более простым, чем уже предложенные:
На странице загрузки Mercurial предлагается
ртутный
<x.y.z>
для Python 2.7 в Windows x86 (исходная установка)
а также
ртутный
<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 с помощью инструкций отсюда
меры
- Удалите все существующие установки Mercurial
- Загрузите и установите один из приведенных выше EXE-файлов в зависимости от того, является ли установка Python 2.7 32-разрядной или 64-разрядной (если вы получаете сообщение об ошибке "Python 2.7 не может быть найден в реестре", вам, вероятно, понадобится другой).
Сейчас hg clone <some git repo>
должен работать на консоли.
После долгих исследований мне наконец удалось правильно настроить hggit.
Что я наделал:
- Я установил последнюю версию TortoiseHg (в моем случае - версию 5.9.1).
Эта официальная версия (автоматически) содержит Python-2.7.18 (согласно справке / о программе) - Скачать dulwich:
cd C:\dulwich
,git clone https://github.com/dulwich/dulwich.git .
- TortoiseHg использует Python 2.7, dulwich больше не поддерживает эту (старую) версию Python. Мы должны вернуться к более старой версии dulwich (<0.20)
git reset --hard c6993451a745d313f61e5d080b9f9d8611a8d7f4
- Подпапка
C:\dulwich\dulwich
должен быть скопирован внутри zip файла
C:\Program Files\TortoiseHg\lib\library.zip
так что есть путь
C:\Program Files\TortoiseHg\lib\library.zip\dulwich
Это можно сделать с помощью следующих команд:
a) Извлечь текущее содержимое библиотеки TortoiseHg.
md "C:\Program Files\TortoiseHg\lib\ExtractedLibrary"
tar -xf "C:\Program Files\TortoiseHg\lib\library.zip" -C "C:\Program Files\TortoiseHg\lib\ExtractedLibrary"
б) Скопируйте файлы dulwich в каталог
xcopy C:\dulwich\dulwich "C:\Program Files\TortoiseHg\lib\ExtractedLibrary\dulwich\"
c) Сохраните старый library.zip и создайте новый library.zip
ren "C:\Program Files\TortoiseHg\lib\library.zip" library_old.zip
cd "C:\Program Files\TortoiseHg\lib\ExtractedLibrary"
tar -acf "C:\Program Files\TortoiseHg\lib\library.zip" *.*
г) Очистка
cd ..
rd /q /s "C:\Program Files\TortoiseHg\lib\ExtractedLibrary"
rd /q /s C:\dulwich
- Загрузите hg-git:
cd C:\hg-git
,hg clone https://foss.heptapod.net/mercurial/hg-git .
- Текущая версия hg-git также больше не поддерживает Python 2.7. Нам нужно вернуться к последней рабочей версии 0.9.0 (= ревизия 1320 в TortoiseHg):
hg update 6d7d6f174df8
- Создайте новый пустой репозиторий, который будет «подключен» к удаленному репозиторию git.
cd C:\MyLocalHgRepoWhichIsConnectedToGit
,hg init
- Создать текстовый файл
C:\MyLocalHgRepoWhichIsConnectedToGit\.hg\hgrc
со следующим содержанием:
[paths] default = C:\ConnectedGitRepoForPushAndPull [extensions] hgext.bookmarks = hggit = C:\hg-git\hggit
Вот и все. Теперь вы можете выполнить
hg pull
или
hg push
.
Я столкнулся с этой проблемой тоже с dulwich.errors. Вместо того, чтобы устанавливать все с нуля. Я только что скопировал dulwich из моих стандартных пакетов сайтов в mercurial site-пакеты. работал без проблем.
Пока вы не получите import dulwich
работать, hggit
не сработает Проверьте, что dulwich
яйцо файл в вашем easy-install.pth
файл под site-packages
,
Для дальнейшей отладки вы можете попробовать спросить pkg_resources
об этом:
import pkg_resources
pkg_resources.require("dulwich")
sudo apt-get install python-dev # Дам вам зависимость!
sudo easy_install dulwich
Успех!