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 bin folders.

LD_LIBRARY_PATH

Containing all the requirements lib folders. (Linux)

DYLD_LIBRARY_PATH

Containing all the requirements lib folders. (OSX)

DYLD_FRAMEWORK_PATH

Containing all the requirements framework_paths folders. (OSX)

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.