【问题标题】:Setting meld as git mergetool with Python3使用 Python3 将 meld 设置为 git mergetool
【发布时间】:2019-09-25 14:24:04
【问题描述】:

我尝试将 meld 设置为与 git 一起使用的合并工具:

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

如以下问题的答案所述:

How to set Meld as 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,但这会导致以下崩溃:

【问题讨论】:

标签: python python-3.x git git-merge meld


【解决方案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 中运行的shell 脚本(最有可能从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 等DLL,因此您必须调整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')]

我无法在第一行为meld 正确设置 Cairo、GTK 等。但是,您可以跳过第一行,直接使用 conda 或 pip 安装软件包。您仍然需要将 meld 包插入sys.path

请记住,meld 编译为 32 位,安装文件夹中的 x86 证明了这一点。如果您使用包含的 DLL,则只能使用 32 位 python 解释器运行它,这可能需要额外安装。如果您的环境已经包含所有必需的包,则不需要 32 位解释器。

【讨论】:

  • 感谢您的帮助!这让我更进一步。现在收到以下错误:'文件“c:/Progra~2/meld/bin/meld”,第 79 行,在 import meld.conf # noqa: E402 ModuleNotFoundError: No module named 'meld''
  • 刚刚看到您的编辑。我最初确实尝试过,但由于我遇到的错误,它并不意味着它可以工作。我已将其添加到我原来的问题中。
  • @Plog。我得到了融合出现。原来这是一个奇怪的路径。不知道为什么会这样。您很可能在 Python 2.7 环境中安装了 PyGtk、PyCairo、PyGObject 等。
  • @Plog。我还不会选择这个。我去看看meld.exe的源码,我觉得应该只是设置脚本的环境。可能会得到一个 PR,或者至少是一个错误报告。
  • 哇,非常感谢您为此付出的所有努力!不过我有点困惑。将该文件夹添加到 PATH 变量并没有解决我的问题。我也应该安装 32 位解释器吗?
猜你喜欢
  • 2023-04-04
  • 2016-03-11
  • 2017-09-05
  • 2020-12-27
  • 2019-01-09
  • 1970-01-01
  • 2014-07-20
  • 1970-01-01
  • 2010-12-21
相关资源
最近更新 更多