Настройка meld как git mergetool с Python3

Я попытался установить meld в качестве инструмента слияния для использования с git:

git config --global merge.tool meld
git config --global mergetool.meld.path c:/Progra~2/meld/bin/meld

Как указано в ответах на такие вопросы, как:

Как установить Meld как git mergetool

Раньше у меня это работало на моей старой рабочей машине, но теперь на моей новой машине, где у меня установлен Python3 вместо 2.7, я получаю следующую ошибку всякий раз, когда пытаюсь использовать git mergetool:

C:/Program Files/Git/mingw64/libexec/git-core/mergetools/meld: c:/Progra~2/Meld/bin/meld: C:/msys64/MINGW32/bin/python3.exe: плохой интерпретатор: Нет такой файл или каталог

Любые идеи, какие дополнительные шаги мне нужно сделать, чтобы заставить это работать с Python3?

РЕДАКТИРОВАТЬ: я также пытался указать непосредственно на Meld.exe, но это вызывает следующий сбой:

введите описание изображения здесь


person Plog    schedule 25.09.2019    source источник
comment
Обнаружена ошибка: stackoverflow.com/q/11642134/2988730. Не дубликат, просто намек.   -  person Mad Physicist    schedule 27.09.2019
comment
Вот: gitlab.gnome.org/GNOME/meld/issues/376. Учитывая то, что я нашел в своем ответе, я думаю, что это разумный отчет для подачи.   -  person Mad Physicist    schedule 28.09.2019
comment
Похоже, проблема была исправлена ​​в новой версии релиза (не мной).   -  person Mad Physicist    schedule 23.05.2020


Ответы (1)


Сценарий .../bin/meld в основном используется для справки. Вы должны установить

git config mergetool.meld.path "C:/Program Files (x86)/Meld/Meld.exe"

Вам не нужно использовать нотацию Progra~2, если вы действительно не хотите этого по какой-то причине.

Единственная проблема, с которой я сталкиваюсь, заключается в том, что он неправильно подбирает установленные расширения зависимостей в C:/Program Files (x86)/Meld/lib. Вам нужно добавить C:/Program Files (x86)/Meld/lib к переменной среды PATH либо с помощью SET PATH=C:/Program Files (x86)/Meld/lib;%PATH%, либо через «Редактировать переменные среды для вашей учетной записи» где-нибудь в панели управления/меню «Пуск».

Альтернативный подход

Если вы откроете C:\Program Files (x86)\Meld\bin\meld в текстовом редакторе, вы увидите, что это сценарий оболочки, предназначенный для запуска в python3 (скорее всего, вызывается из C:\Program Files\Git\bin\sh.exe).

Первая строка meld гласит:

#!C:/msys64/MINGW32/bin/python3.exe

Эта проблема не возникает при использовании Meld.exe, потому что он не использует скрипт через интерпретатор Python.

Маловероятно, что интерпретатор Python установлен в этом месте на вашем компьютере. Вместо этого вы можете заменить строку shebang, чтобы она указывала на существующий интерпретатор. Например, на моей машине meld начинается с:

#!C:/Users/MadPhysicist/AppData/Local/Continuum/anaconda3/python.exe

Этого по-прежнему будет недостаточно для того, чтобы скрипт нашел пакет meld и все установленные библиотеки GTK, cairo и т. д., поэтому вам нужно настроить пути как python, так и системные. Вставьте следующее перед строкой import meld # noqua: E402 (строка ~78):

os.environ['PATH'] = os.pathsep.join((melddir, os.path.join(melddir, 'lib'), os.environ['PATH']))
sys.path[0:0] = [os.path.join(melddir, 'lib/python3.7/site-packages')]

Мне никогда не удавалось заставить первую строку правильно настроить Cairo, GTK и т. д. для meld. Однако вы можете пропустить первую строку и просто установить пакеты с помощью conda или pip. Вам все равно нужно будет вставить пакет meld в sys.path.

Имейте в виду, что meld скомпилирован в 32 бита, о чем свидетельствует x86 в папке установки. Вы можете запустить его только с 32-битным интерпретатором Python, если вы используете прилагаемые библиотеки DLL, которые могут потребовать дополнительной установки. Вам не нужен 32-битный интерпретатор, если ваша среда уже содержит все необходимые пакеты.

person Mad Physicist    schedule 27.09.2019
comment
Спасибо за помощь! Это продвинуло меня на один шаг вперед. Теперь возникает следующая ошибка: 'Файл c:/Progra~2/meld/bin/meld, строка 79, в ‹module› import meld.conf # noqa: E402 ModuleNotFoundError: нет модуля с именем 'meld'' - person Plog; 27.09.2019
comment
Только что увидел вашу правку. Я действительно пробовал это изначально, полагая, что это не должно работать из-за ошибки, которую я получил. Я добавил это к своему исходному вопросу. - person Plog; 27.09.2019
comment
@Плог. Я получил мелд, чтобы появиться. Оказывается, это странный путь. Не уверен, почему это происходит. Скорее всего, в вашей среде Python 2.7 были установлены PyGtk, PyCairo, PyGObject и т. д. - person Mad Physicist; 27.09.2019
comment
@Плог. Я бы пока не выбрал это. Я собираюсь посмотреть исходный код meld.exe, который, я думаю, должен просто настраивать среду сценария. Из этого можно получить PR или, по крайней мере, отчет об ошибке. - person Mad Physicist; 28.09.2019
comment
Вау, супер ценю всю работу, которую вы вложили в это! Я немного смущен, хотя. Добавление этой папки в переменную PATH не решило проблему для меня. Я тоже должен установить 32-битный интерпретатор? - person Plog; 30.09.2019
comment
О, на самом деле я попробовал это на том простом случае воспроизведения, который вы добавили в заявке на ошибку, и это работает там, но в репозитории, над которым я в основном работаю, я все еще получаю ту же ошибку, что очень странно... - person Plog; 30.09.2019
comment
Неважно. Перезагрузка ПК решила это! Большое спасибо! - person Plog; 30.09.2019