如何使用 pip 从 git 存储库安装 python 包含 git-lfs 内容的软件包?
How to install python package from git repo that has git-lfs content with pip?
我已将 git 存储库中的大文件迁移到 git-lfs。存储库包含自定义 python 库的源代码。我能够使用 pip 安装它:
pip install git+https://gitserver.com/myrepo.git@branch
目前(迁移后),存储在 lfs 的大文件显然不在安装范围内(只有链接)。我已经在环境中安装了来自 PyPI 的 git-lfs 包,但它没有帮助。
有什么方法可以告诉 pip 在克隆 repo 时获取 git-lfs 文件?
如果您的 per-user 或系统配置设置正确,那么 Git 将在克隆使用 Git LFS 的存储库时自动调用 Git LFS。
最简单的方法是 运行 git lfs install --skip-repo
,这将修改您的 .gitconfig
以包含正确的条目。您可以通过 运行ning git lfs env
并确保打印的最后三个 git config
选项是 non-empty.
来验证您的配置是否正确
设置完成后,任何时候您使用 Git LFS 克隆新存储库时,LFS 文件都会自动获取并填充。如果您有现有存储库,则可以使用 git lfs checkout
手动签出文件。
我遇到了同样的问题,我有几个包含 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}
在 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 回购上的 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())
我已将 git 存储库中的大文件迁移到 git-lfs。存储库包含自定义 python 库的源代码。我能够使用 pip 安装它:
pip install git+https://gitserver.com/myrepo.git@branch
目前(迁移后),存储在 lfs 的大文件显然不在安装范围内(只有链接)。我已经在环境中安装了来自 PyPI 的 git-lfs 包,但它没有帮助。
有什么方法可以告诉 pip 在克隆 repo 时获取 git-lfs 文件?
如果您的 per-user 或系统配置设置正确,那么 Git 将在克隆使用 Git LFS 的存储库时自动调用 Git LFS。
最简单的方法是 运行 git lfs install --skip-repo
,这将修改您的 .gitconfig
以包含正确的条目。您可以通过 运行ning git lfs env
并确保打印的最后三个 git config
选项是 non-empty.
设置完成后,任何时候您使用 Git LFS 克隆新存储库时,LFS 文件都会自动获取并填充。如果您有现有存储库,则可以使用 git lfs checkout
手动签出文件。
我遇到了同样的问题,我有几个包含 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}
在 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 回购上的 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())