如何使用 pip 从 git 存储库安装具有 git-lfs 内容的 python 包?

lov*_*doo 2 python git pip git-lfs

我已将 git 存储库中的大文件迁移到 git-lfs。该存储库包含自定义 python 库的源代码。我可以用 pip 安装它:

pip install git+https://gitserver.com/myrepo.git@branch
Run Code Online (Sandbox Code Playgroud)

目前(迁移后),存储在 lfs 的大文件显然不在安装范围内(只有链接)。我已经在环境中安装了 PyPI 的 git-lfs 包,但没有帮助。
有没有办法告诉 pip 在克隆存储库时获取 git-lfs 文件?

bk2*_*204 5

如果您正确设置了每用户或系统配置设置,那么 Git 将在克隆使用 Git LFS 的存储库时自动调用 Git LFS。

最简单的方法是运行git lfs install --skip-repo,这将修改您的.gitconfig文件以包含正确的条目。git lfs env您可以通过运行并确保打印的最后三个git config选项非空来验证您的配置是否正确。

设置完成后,每当您使用 Git LFS 克隆新存储库时,LFS 文件都会自动获取并填充。如果您有现有存储库,则可以git lfs checkout手动签出文件。


bap*_*ste 5

我遇到了同样的问题,我有几个包含 LFS 文件的内部 python 包。他们每个人都有自己的requirements.txt文件setup.py,其中一个基于 pip 并且不能很好地处理,git lfs另一个基于setuptools......

我的requirements.txt样子:

pip_package1==0.1
pip_package2==0.2
pip_package3==0.3
git+ssh://git@{url}:{port}/{repo}.git@{branch}
Run Code Online (Sandbox Code Playgroud)

解决方案setup.py是捕获任何git+ssh不让它们进入该setup函数的函数,而是通过 pip 强制安装它们:

def install_requires():
    reqdir = os.path.dirname(os.path.realpath(__file__))
    with open(os.path.join(reqdir, 'requirements.txt'), encoding='utf-8') as f:
        all_packages = f.readlines()
        packages = [
            package
            for package in all_packages
            if 'git+ssh' not in package
        ]
        manual_pip_packages = [
            package
            for package in all_packages
            if 'git+ssh' in package
        ]
        for package in manual_pip_packages:
            subprocess.call([sys.executable, '-m', 'pip', 'install', package])
    return packages
Run Code Online (Sandbox Code Playgroud)

然后是pip/git lfs兼容性。我所理解的是pip installgit 存储库上的 a 会很简单git clone,然后python setup.py [something]我在setup.py包含 lfs 文件的包中的每个文件中添加了一个,git pull假设相关内容setup.py位于 git 存储库中。

def pull_first():
    """This script is in a git directory that can be pulled."""
    cwd = os.getcwd()
    gitdir = os.path.dirname(os.path.realpath(__file__))
    os.chdir(gitdir)
    g = git.cmd.Git(gitdir)
    try:
        g.execute(['git', 'lfs', 'pull'])
    except git.exc.GitCommandError:
        raise RuntimeError("Make sure git-lfs is installed!")
    os.chdir(cwd)
Run Code Online (Sandbox Code Playgroud)

这样我就有了setup.py

from setuptools import setup, find_packages

import os
import subprocess
import sys

try:
    import git
except ModuleNotFoundError:
    subprocess.call([sys.executable, '-m', 'pip', 'install', 'gitpython'])
    import git


def install_requires():
    ...


def pull_first():
    ...


pull_first()

setup(name=...,
      version=...,
      description=...,
      long_description=...,
      url=...,
      author=...,
      license=...,
      packages=find_packages(),
      python_requires=">=3.0",
      install_requires=install_requires())
Run Code Online (Sandbox Code Playgroud)