【发布时间】:2022-03-24 00:47:57
【问题描述】:
我将 CI/CD 管道与 git-lfs 结合使用。在我的脚本开始时,我想加载一个通过 LFS 存储的 pickle 文件(参见下面的代码)。我的代码在本地机器上运行良好,但在管道中出现以下错误:
_pickle.UnpicklingError: 无效的加载键,'v'
Itseemsthat这个错误是由于LFS文件没有被获取,可以通过一个简单的git lfs pull命令解决。
现在的问题是,我如何在管道中调用git lfs pull?我天真地尝试将它添加到我也调用我的 python 脚本的.yml 文件中,但这不起作用。如果这个问题有点愚蠢,我很抱歉,我有点超出了我的正常领域。
编辑有关错误发生时间和使用的 CI/CD 的一些详细信息:
这些是导致错误发生的行:
open("path_to_file/file", 'rb')
data = pickle.load(f)
我使用的是 Gitlab CI/CD,定义工作流的 .yml 文件如下:
before_script:
- rm -rf "*-env"; python3.8 -m venv ${CI_JOB_ID}-env
- ${CI_JOB_ID}-env/bin/pip3 install -U pip
after_script:
- rm -rf ${CI_JOB_ID}-env
stages:
- calculations
CalcStrategicValues:
stage: calculations
only:
- calculate
script:
- ${CI_JOB_ID}-env/bin/pip3 install -r requirements.txt
# - ${CI_JOB_ID}-env/git lfs pull <- my attempt at solving the problem
- ${CI_JOB_ID}-env/bin/python3 calculate.py
allow_failure: false
artifacts:
name: results
when: always
paths:
- output/
【问题讨论】:
-
您的管道使用什么工具?您能否将相关部分包含在代码块中,以便我们提供建议?
-
@bk2204 不幸的是,我不确定您的意思,但是在调用
f = open("path_to_file/file", 'rb')和data = pickle.load(f)行时会出现错误,其中file 是一个lfs 文件。 -
您说您正在为代码使用 CI/CD 管道。那是 GitHub Actions 吗?是别的吗?编辑您的问题,以代码块形式向我们展示 GitHub Actions 工作流文件或其他 CI/CD 管道描述。
-
感谢您澄清这一点。我将其添加到原始问题中。我希望这包含所有必需的信息。
标签: python git continuous-integration continuous-deployment git-lfs