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

如何在conanfile.py中访问conan create -e设置的环境变量

无法读取变量的原因

Conan 1.x中通过conan create -e参数传入的环境变量,默认仅作用于后续包构建阶段的子进程环境,不会直接注入到ConanFile脚本自身运行的Python进程的os.environ字典中。同时set_version属于Conan执行流程的极早期阶段,常规的环境上下文还未完成初始化,因此直接调用os.environ无法读取到传入的VAR变量。

正确读取方式

根据你需要读取变量的阶段,可选择对应方案:

1. 常规阶段(build/package等方法)读取

直接使用Conan内置的tools.get_env接口即可,该接口会优先匹配-e传入的环境变量,变量不存在时会自动回退读取系统os.environ的对应值:

import os
import sys
from conans import ConanFile, tools


class BaseLibrary(ConanFile):
  name = "base-library"
  version = "1.0.0"

  def build(self):
    # 第二个参数为可选的默认值,变量不存在时返回默认值避免报错
    var_value = tools.get_env("VAR", "default_value")
    print(var_value)

2. 在set_version等早期阶段读取

set_version执行优先级极高,需要额外处理才能拿到-e传入的变量,可以选择以下两种方案:

方案A:调整传参方式

将命令行参数调整为conan create -c env.VAR=A . demo/testing,通过全局配置项传参,之后直接在set_version中读取配置即可:

def set_version(self):
    var_value = self.conf.get("env.VAR", default="default_value")
    print(var_value)
    self.version = "1.0.0"

方案B:显式加载环境变量

如果必须保留-e的传参方式,可以在set_version中显式加载传入的环境上下文到当前进程:

import os
from conans import ConanFile
from conans.client.tools import environment_append


class BaseLibrary(ConanFile):
  name = "base-library"

  def set_version(self):
    # 显式将传入的环境变量加载到当前上下文
    with environment_append(self.env):
        print(os.environ.get("VAR"))
    self.version = "1.0.0"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:39:00