首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从使用者添加到

从使用者添加到
EN

Stack Overflow用户
提问于 2020-07-17 14:13:15
回答 1查看 1K关注 0票数 0

这是关于virtualenv-generator of conan

我有一个使用self.env_info定义环境变量的提供程序包。这意味着在我的消费者包中执行conan install时,我会收到一个方便的activate.sh脚本,它可以设置我的虚拟环境。

但是,我想从我的使用者中向这个虚拟环境添加一些环境变量。当然,我可以手动添加这些变量,或者编写一个简单的包装器--使用环境的脚本--从我的提供程序中添加一些变量并添加一些本身。这意味着创建自定义解决方案,我只想在可能的情况下使用conan。

基本上,我希望我的消费者提供的环境变量在我执行environment.sh.env后立即在conan install中登陆。一个可以接受的选择是,当我执行conan build时,它们会降落在那里。

我试过的一件事是:

代码语言:javascript
运行
复制
def requirements(self):
    self.env_info.FOO = "bar"

但是,正如所描述的,在医生里 self.env_info只在package_info方法中定义。

conan内部是否有可能从消费者包中扩展提供者包的环境变量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-17 16:14:05

您可以使用一个可以支持任何东西的特殊选项:ANY

https://docs.conan.io/en/latest/reference/conanfile/attributes.html#options

代码语言:javascript
运行
复制
class FooConan(ConanFile):

    options = {"custom_env": "ANY"}
    default_options = {"custom_env": tools.get_env("MYENVVAR")}

    def package_id(self):
        del self.info.options.FOO # Doesn't affect the package ID

    def package_info(self):
        self.env_info.FOO = self.options.custom_env

上面的示例显示了一个菜谱,它接收一个自定义选项,它不影响id,并且用于客户环境。

无论如何,self.env_info不应该在安装时使用,它是在构建包时使用的。虚拟能够更改您的路径,如果您需要运行打包的特定工具,这将非常有用。

第二种方法是更动态的,因为cpp_info是动态的,您可以直接从用户环境中消费:

代码语言:javascript
运行
复制
class FooConan(ConanFile):
    ...
    def package_info(self):
        self.env_info.FOO = tools.get_env("FOO", "waka waka")

在本例中,当运行conan install <ref> -g virtualenv时,environment.sh.env将包含FOO=waka waka OR,如果FOO是在使用者环境中声明的,则FOO的值来自使用者env。

如果您想影响您的需求,使用env,不要这样做!需求影响包ID,Conan选项是最佳解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62955831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档