如何从具有git-lfs内容且带有pip的git repo安装python包?

时间:2019-05-31 10:29:22

标签: python git pip git-lfs

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

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

当前(迁移后),显然,在lfs中存储的大文件没有安装(只有链接)。我已经在环境中安装了PyPI的git-lfs软件包,但没有帮助。
有什么方法可以告诉pip在克隆仓库时获取git-lfs文件?

2 个答案:

答案 0 :(得分:0)

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

最简单的方法是运行class liftComponent extends React.Component { constructor(props){ super(props); } componentDidMount(){ setInterval(function(){ handlerPosition() }, 1000); } render() {} } const mapStateToProps = state => ({ currentLevel: state }) const mapDispatchToProps = (dispatch) => ({ handlerPosition: (currentLevel) => dispatch(handlerPosition), }) export default connect(mapStateToProps,mapDispatchToProps)(liftComponent); ,它将修改您的git lfs install --skip-repo以包含正确的条目。您可以通过运行.gitconfig并确保最后显示的三个git lfs env选项为非空来验证配置是否正确。

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

答案 1 :(得分:0)

我遇到了相同的问题,我有几个包含LFS文件的内部python软件包。他们每个人都有自己的requirements.txtsetup.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}

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

然后是pip / git lfs兼容性。我了解的是git repo上的pip install会先git clone然后是python setup.py [something],所以我在包含lfs文件的软件包中的每个setup.py中添加了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())