这是关于virtualenv-generator of conan的
我有一个使用self.env_info
定义环境变量的提供程序包。这意味着在我的消费者包中执行conan install
时,我会收到一个方便的activate.sh脚本,它可以设置我的虚拟环境。
但是,我想从我的使用者中向这个虚拟环境添加一些环境变量。当然,我可以手动添加这些变量,或者编写一个简单的包装器--使用环境的脚本--从我的提供程序中添加一些变量并添加一些本身。这意味着创建自定义解决方案,我只想在可能的情况下使用conan。
基本上,我希望我的消费者提供的环境变量在我执行environment.sh.env后立即在conan install
中登陆。一个可以接受的选择是,当我执行conan build
时,它们会降落在那里。
我试过的一件事是:
def requirements(self):
self.env_info.FOO = "bar"
但是,正如所描述的,在医生里 self.env_info
只在package_info
方法中定义。
conan内部是否有可能从消费者包中扩展提供者包的环境变量?
发布于 2020-07-17 16:14:05
您可以使用一个可以支持任何东西的特殊选项:ANY
https://docs.conan.io/en/latest/reference/conanfile/attributes.html#options
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是动态的,您可以直接从用户环境中消费:
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选项是最佳解决方案。
https://stackoverflow.com/questions/62955831
复制相似问题