GitPython:在运行时设置 git 可执行文件

GitPython: set git executable at runtime

我想在以下场景中使用 GitPython:

我想使用便携式 git,无论 git 是否已安装(原因是 this issue)。


我知道我可以通过设置 GIT_PYTHON_GIT_EXECUTABLE 环境变量来指定 git 可执行文件,但是

  1. 我还没有找到在 windows 上执行此操作的方法(setx 似乎做了 某事 ,但是 env 之后显示没有这样的变量)除了手动编辑系统环境变量。

  2. 这应该是一个最终用户程序,我无法发送像 "please set an environment variable" 这样的指令。

  3. 路径只有在程序已经运行时才知道。


所以我的问题是,如何在运行时手动设置可执行文件路径?以下似乎不起作用,它只打印 git 和我系统的 git 版本:

import os
import sys

# Download and extract a portable git

git_dir = r"C:\Users\Florian\Downloads\mingit-busybox\cmd"
git_bin = os.path.join(git_dir, "git")

os.putenv("GIT_PYTHON_GIT_EXECUTABLE", git_bin)
os.environ.putenv("GIT_PYTHON_GIT_EXECUTABLE", git_bin)

# Attempt with VonC's Answer, making sure that it is first in PATH
sys.path = [git_dir] + sys.path
os.pathsep.join([git_dir]) + os.pathsep + os.environ["PATH"]

# Only import git now, because that's when the path is checked!
import git
g = git.Git()
print(g.GIT_PYTHON_GIT_EXECUTABLE)
print(".".join([str(v) for v in g.version_info]))
❯ python .\gitpython_test.py
git
2.23.0 # My portable git version is 2.20.1

检查除了设置之外,您是否可以设置 PATH。
参见“how to set PATH=%PATH% as environment in Python script?

目标是将 PATH 设置为 C:\Users\Florian\Downloads\mingit-busybox\cmd;%PATH%,这意味着来自 mingit-busyboxgit 首先出现

这是一个最小的例子:

git_dir = r"C:\Users\Florian\Downloads\mingit-busybox\cmd"
# Make sure it's at the beginning of the PATH
os.environ["PATH"] = os.pathsep.join([git_dir]) + os.pathsep + os.environ["PATH"]
# NOW import it
import git