You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无网络时Snakemake远程提供者致DAG构建失败的解决办法

解决Snakemake无网络环境下使用已缓存HTTP远程文件的问题

在无网络的HPC集群上,即便本地已存在所有需要的远程文件,Snakemake仍会在DAG构建阶段尝试访问网络解析HTTP远程输入,导致工作流失败。以下是几种可行的解决方案:

1. 使用--skip-remote-checks命令行参数

Snakemake内置的--skip-remote-checks选项会跳过所有远程文件的存在性、校验和检查,直接使用本地已有的文件。无需修改Snakefile,在无网环境运行时添加该参数即可:

snakemake --skip-remote-checks

2. 条件化输入源,优先使用本地文件

修改规则的输入定义,通过Python条件判断优先加载已存在的本地文件,仅当本地文件缺失时才调用远程提供者。需导入os模块:

import os
from shutil import copyfile, move

from snakemake.remote.HTTP import RemoteProvider as HTTPRemoteProvider
HTTP = HTTPRemoteProvider()

rule retrieve_cost_data:
    input:
        lambda wildcards: (
            HTTP.remote(
                "raw.githubusercontent.com/PyPSA/technology-data/v0.5.0/outputs/costs_{year}.csv",
                keep_local=True,
            ) if not os.path.exists(f"data/costs_{wildcards.year}.csv")
            else f"data/costs_{wildcards.year}.csv"
        ),
    output:
        "data/costs_{year}.csv",
    run:
        # 仅当输入为远程文件时执行移动操作
        if input[0] != output[0]:
            move(input[0], output[0])

rule use_cost_data:
    input:
        "data/costs_2030.csv"
    output:
        "resources/costs.csv"
    default_target:
        True
    run:
        copyfile(input[0], output[0])

这种方式会在DAG构建阶段自动判断本地文件状态,避免无网时触发网络请求。

3. 通过环境变量控制远程提供者加载

在Snakefile中根据环境变量决定是否导入HTTP远程提供者,完全跳过远程输入的解析逻辑:

import os
from shutil import copyfile, move

# 环境变量SNAKEMAKE_USE_LOCAL设为1时启用本地模式
USE_LOCAL = os.environ.get("SNAKEMAKE_USE_LOCAL", "0") == "1"

# 仅在非本地模式下导入远程提供者
if not USE_LOCAL:
    from snakemake.remote.HTTP import RemoteProvider as HTTPRemoteProvider
    HTTP = HTTPRemoteProvider()

rule retrieve_cost_data:
    input:
        HTTP.remote(
            "raw.githubusercontent.com/PyPSA/technology-data/v0.5.0/outputs/costs_{year}.csv",
            keep_local=True,
        ) if not USE_LOCAL else f"data/costs_{wildcards.year}.csv",
    output:
        "data/costs_{year}.csv",
    run:
        if not USE_LOCAL:
            move(input[0], output[0])

rule use_cost_data:
    input:
        "data/costs_2030.csv"
    output:
        "resources/costs.csv"
    default_target:
        True
    run:
        copyfile(input[0], output[0])

无网环境下运行时,先设置环境变量再启动工作流:

export SNAKEMAKE_USE_LOCAL=1
snakemake

内容的提问来源于stack exchange,提问作者euronion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 12:07:06