从消费者添加到 conan virtualenv
Add to conan virtualenv from consumer
这是关于 virtualenv-generator of conan:
我有一个使用 self.env_info
定义环境变量的提供程序包。
这意味着当在我的消费者包中执行 conan install
时,我会收到一个方便的 activate.sh 脚本来设置我的虚拟环境。
但是我想从我的 consumer 添加一些环境变量到这个虚拟环境。
当然,我可以手动添加这些,或者编写一个简单的包装脚本,使用我的提供商提供的环境变量并自行添加一些。
这意味着创建自定义解决方案,我希望尽可能只使用柯南来处理这些事情。
基本上,我希望我的消费者提供的环境变量在我执行 conan install
后立即进入 environment.sh.env。
一个可以接受的替代方案是,如果他们在我执行 conan build
时降落在那里
我试过的一件事:
def requirements(self):
self.env_info.FOO = "bar"
但是,如上所述 in the docs self.env_info
仅在 package_info
方法中定义。
conan 中是否有可能从消费者包扩展提供者包的环境变量?
您可以使用一个可以支持任何东西的特殊选项: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
不应该在安装时使用,它会在构建包时被消耗掉。 virtualrunenv 能够更改您的 PATH,如果您需要 运行 打包的特定工具,这将很有用。
第二种方式,更动态,因为cpp_info是动态的,你可以直接从用户环境消费:
class FooConan(ConanFile):
...
def package_info(self):
self.env_info.FOO = tools.get_env("FOO", "waka waka")
在这种情况下,当 运行ning conan install <ref> -g virtualenv
时,environment.sh.env
将包含 FOO=waka waka
或者,如果在消费者环境中声明了 FOO,则 FOO 的值来自消费者环境
如果你想影响你的要求,使用环境变量,不要这样做!要求影响包ID,柯南选项是最好的解决方案。
这是关于 virtualenv-generator of conan:
我有一个使用 self.env_info
定义环境变量的提供程序包。
这意味着当在我的消费者包中执行 conan install
时,我会收到一个方便的 activate.sh 脚本来设置我的虚拟环境。
但是我想从我的 consumer 添加一些环境变量到这个虚拟环境。 当然,我可以手动添加这些,或者编写一个简单的包装脚本,使用我的提供商提供的环境变量并自行添加一些。 这意味着创建自定义解决方案,我希望尽可能只使用柯南来处理这些事情。
基本上,我希望我的消费者提供的环境变量在我执行 conan install
后立即进入 environment.sh.env。
一个可以接受的替代方案是,如果他们在我执行 conan build
我试过的一件事:
def requirements(self):
self.env_info.FOO = "bar"
但是,如上所述 in the docs self.env_info
仅在 package_info
方法中定义。
conan 中是否有可能从消费者包扩展提供者包的环境变量?
您可以使用一个可以支持任何东西的特殊选项: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
不应该在安装时使用,它会在构建包时被消耗掉。 virtualrunenv 能够更改您的 PATH,如果您需要 运行 打包的特定工具,这将很有用。
第二种方式,更动态,因为cpp_info是动态的,你可以直接从用户环境消费:
class FooConan(ConanFile):
...
def package_info(self):
self.env_info.FOO = tools.get_env("FOO", "waka waka")
在这种情况下,当 运行ning conan install <ref> -g virtualenv
时,environment.sh.env
将包含 FOO=waka waka
或者,如果在消费者环境中声明了 FOO,则 FOO 的值来自消费者环境
如果你想影响你的要求,使用环境变量,不要这样做!要求影响包ID,柯南选项是最好的解决方案。