如何从git repo安装包含gitlfs内容的pip python包?

2024-10-02 12:30:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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

pip install git+https://gitserver.com/myrepo.git@branch

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


Tags: installpip文件httpsgitpypicombranch
2条回答

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

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

一旦设置好了,每当您使用gitlfs克隆一个新的存储库时,LFS文件将被自动获取并填充。如果您有一个现有的存储库,您可以使用git lfs checkout手动签出文件。在

我遇到了同样的问题,我有几个内部python包包含LFS文件。它们都有自己的requirements.txtsetup.py文件,其中一个基于pip,不能很好地处理git lfs,另一个基于{}。。。在

我的requirements.txt看起来像:

pip_package1==0.1
pip_package2==0.2
pip_package3==0.3
git+ssh://git@{url}:{port}/{repo}.git@{branch}

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

^{pr2}$

那么pip/git lfs兼容性。我所理解的是git repo上的pip install将简单地git clone,然后python setup.py [something],所以我在一个包含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)

这样我就得到了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())

相关问题 更多 >

    热门问题