RunEnvironment
The RunEnvironment
helper prepares PATH
, LD_LIBRARY_PATH
, DYLD_LIBRARY_PATH
and DYLD_FRAMEWORK_PATH
environment variables to locate shared libraries, frameworks and executables of your requirements at runtime.
Warning
The RunEnvironment
is no longer needed, at least explicitly in conanfile.py. It has been integrated
into the self.run(..., run_environment=True)
argument. Check self.run().
This helper is specially useful if:
You are requiring packages with shared libraries and you are running some executable that needs those libraries.
You have a requirement with some tool (executable) and you need it to be in the path.
from conans import ConanFile, RunEnvironment
class ExampleConan(ConanFile):
...
def build(self):
env_build = RunEnvironment(self)
with tools.environment_append(env_build.vars):
self.run("....")
# All the requirements bin folder will be available at PATH
# All the lib folders will be available in LD_LIBRARY_PATH and DYLD_LIBRARY_PATH
# All the framework_paths folders will be available in DYLD_FRAMEWORK_PATH
It sets the following environment variables:
NAME |
DESCRIPTION |
---|---|
PATH |
Containing all the requirements |
LD_LIBRARY_PATH |
Containing all the requirements |
DYLD_LIBRARY_PATH |
Containing all the requirements |
DYLD_FRAMEWORK_PATH |
Containing all the requirements |
Important
Security restrictions might apply in OSX
(read this thread), so the
DYLD_LIBRARY_PATH
and DYLD_FRAMEWORK_PATH
environment variables are not directly transferred to the child process. In that case, you have to use it explicitly in
your conanfile.py:
def build(self):
env_build = RunEnvironment(self)
with tools.environment_append(env_build.vars):
# self.run("./myexetool") # won't work, even if 'DYLD_LIBRARY_PATH' and 'DYLD_FRAMEWORK_PATH' are in the env
self.run("DYLD_LIBRARY_PATH=%s DYLD_FRAMEWORK_PATH=%s ./myexetool" % (os.environ['DYLD_LIBRARY_PATH'], os.environ['DYLD_FRAMEWORK_PATH']))
This is already handled automatically by the self.run(..., run_environment=True)
argument.