def test_get_prefers_explicitly_activated_virtualenvs_over_env_var( tmp_dir: str, manager: EnvManager, poetry: "Poetry", config: "Config", mocker: "MockerFixture", ): os.environ["VIRTUAL_ENV"] = "/environment/prefix" venv_name = manager.generate_env_name("simple-project", str(poetry.file.parent)) config.merge({"virtualenvs": {"path": str(tmp_dir)}}) (Path(tmp_dir) / f"{venv_name}-py3.7").mkdir() envs_file = TOMLFile(Path(tmp_dir) / "envs.toml") doc = tomlkit.document() doc[venv_name] = {"minor": "3.7", "patch": "3.7.0"} envs_file.write(doc) mocker.patch( "subprocess.check_output", side_effect=check_output_wrapper(), ) mocker.patch( "subprocess.Popen.communicate", side_effect=[("/prefix", None)], ) env = manager.get() assert env.path == Path(tmp_dir) / f"{venv_name}-py3.7" assert env.base == Path("/prefix")
def test_deactivate_non_activated_but_existing( tmp_dir: str, manager: EnvManager, poetry: "Poetry", config: "Config", mocker: "MockerFixture", ): if "VIRTUAL_ENV" in os.environ: del os.environ["VIRTUAL_ENV"] venv_name = manager.generate_env_name("simple-project", str(poetry.file.parent)) python = ".".join(str(c) for c in sys.version_info[:2]) (Path(tmp_dir) / f"{venv_name}-py{python}").mkdir() config.merge({"virtualenvs": {"path": str(tmp_dir)}}) mocker.patch( "subprocess.check_output", side_effect=check_output_wrapper(), ) manager.deactivate(NullIO()) env = manager.get() assert env.path == Path(tmp_dir) / f"{venv_name}-py{python}" assert Path("/prefix")
def set_env(self, event, event_name, _): # type: (PreHandleEvent, str, _) -> None from poetry.semver import parse_constraint from poetry.utils.env import EnvManager command = event.command.config.handler # type: EnvCommand if not isinstance(command, EnvCommand): return io = event.io poetry = command.poetry env_manager = EnvManager(poetry.config) # Checking compatibility of the current environment with # the python dependency specified in pyproject.toml current_env = env_manager.get(poetry.file.parent) supported_python = poetry.package.python_constraint current_python = parse_constraint( ".".join(str(v) for v in current_env.version_info[:3]) ) if not supported_python.allows(current_python): raise RuntimeError( "The current Python version ({}) is not supported by the project ({})\n" "Please activate a compatible Python version.".format( current_python, poetry.package.python_versions ) ) env = env_manager.create_venv(poetry.file.parent, io, poetry.package.name) if env.is_venv() and io.is_verbose(): io.write_line("Using virtualenv: <comment>{}</>".format(env.path)) command.set_env(env)
def test_env_get_venv_with_venv_folder_present( manager: EnvManager, poetry: "Poetry", in_project_venv_dir: Path, in_project: Optional[bool], ): poetry.config.config["virtualenvs"]["in-project"] = in_project venv = manager.get() if in_project is False: assert venv.path != in_project_venv_dir else: assert venv.path == in_project_venv_dir
def handle(self): # type: () -> None from poetry.utils.env import EnvManager manager = EnvManager(self.poetry) current_env = manager.get() for venv in manager.list(): name = venv.path.name if self.option("full-path"): name = str(venv.path) if venv == current_env: self.line("<info>{} (Activated)</info>".format(name)) continue self.line(name)
def handle(self): from poetry.utils.env import EnvManager poetry = self.poetry manager = EnvManager(poetry.config) current_env = manager.get(self.poetry.file.parent) for venv in manager.list(self.poetry.file.parent): name = venv.path.name if self.option("full-path"): name = str(venv.path) if venv == current_env: self.line("<info>{} (Activated)</info>".format(name)) continue self.line(name)
def handle(self) -> int: from poetry.utils.env import EnvManager manager = EnvManager(self.poetry) current_env = manager.get() for venv in manager.list(): name = venv.path.name if self.option("full-path"): name = str(venv.path) if venv == current_env: self.line(f"<info>{name} (Activated)</info>") continue self.line(name) return 0
def test_deactivate_activated( tmp_dir: str, manager: EnvManager, poetry: Poetry, config: Config, mocker: MockerFixture, ): if "VIRTUAL_ENV" in os.environ: del os.environ["VIRTUAL_ENV"] venv_name = manager.generate_env_name("simple-project", str(poetry.file.parent)) version = Version.from_parts(*sys.version_info[:3]) other_version = Version.parse( "3.4") if version.major == 2 else version.next_minor() (Path(tmp_dir) / f"{venv_name}-py{version.major}.{version.minor}").mkdir() (Path(tmp_dir) / f"{venv_name}-py{other_version.major}.{other_version.minor}").mkdir() envs_file = TOMLFile(Path(tmp_dir) / "envs.toml") doc = tomlkit.document() doc[venv_name] = { "minor": f"{other_version.major}.{other_version.minor}", "patch": other_version.text, } envs_file.write(doc) config.merge({"virtualenvs": {"path": str(tmp_dir)}}) mocker.patch( "subprocess.check_output", side_effect=check_output_wrapper(), ) manager.deactivate(NullIO()) env = manager.get() assert env.path == Path( tmp_dir) / f"{venv_name}-py{version.major}.{version.minor}" assert Path("/prefix") envs = envs_file.read() assert len(envs) == 0