Example #1
0
    def _activate(self):
        if not self._working_set:
            working_set = WorkingSet([])

            # set up the local .pex environment
            pex_info = self._pex_info.copy()
            pex_info.update(self._pex_info_overrides)
            pex_info.merge_pex_path(self._vars.PEX_PATH)
            self._envs.append(PEXEnvironment(self._pex, pex_info, interpreter=self._interpreter))
            # N.B. by this point, `pex_info.pex_path` will contain a single pex path
            # merged from pex_path in `PEX-INFO` and `PEX_PATH` set in the environment.
            # `PEX_PATH` entries written into `PEX-INFO` take precedence over those set
            # in the environment.
            if pex_info.pex_path:
                # set up other environments as specified in pex_path
                for pex_path in filter(None, pex_info.pex_path.split(os.pathsep)):
                    pex_info = PexInfo.from_pex(pex_path)
                    pex_info.update(self._pex_info_overrides)
                    self._envs.append(
                        PEXEnvironment(pex_path, pex_info, interpreter=self._interpreter)
                    )

            # activate all of them
            for env in self._envs:
                for dist in env.activate():
                    working_set.add(dist)

            # Ensure that pkg_resources is not imported until at least every pex environment
            # (i.e. PEX_PATH) has been merged into the environment
            PEXEnvironment.declare_namespace_packages(working_set)
            self._working_set = working_set

        return self._working_set