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



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

  • 下载并提取一个可移植的git(例如其中一个(
  • 使用此git可执行文件克隆存储库

我想使用可移植的git,无论git是否已经安装(原因是这个问题(。


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

  1. 除了手动编辑系统环境变量外,我还没有找到在windows上这样做的方法(setx似乎做了一些的事情,但env之后没有显示这样的变量(。

  2. 这应该是一个最终用户程序,我不能发送类似"请设置环境变量"的指令。

  3. 只有当程序已经在运行时,路径才是已知的。


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

import os
import sys
# Download and extract a portable git
git_dir = r"C:UsersFlorianDownloadsmingit-busyboxcmd"
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
请参阅"如何在Python脚本中将PATH=%PATH%设置为环境?">

目标是将PATH设置为C:UsersFlorianDownloadsmingit-busyboxcmd;%PATH%,这意味着mingit-busybox中的git将首先出现

这里有一个最小的例子:

git_dir = r"C:UsersFlorianDownloadsmingit-busyboxcmd"
# 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

最新更新