如何在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
相关产品推荐
相关产品推荐

