Skip to content

Commit c92922a

Browse files
committed
* detect .venv folder in case in-project is true or None
* update docs * add tests
1 parent 0d25eb3 commit c92922a

File tree

3 files changed

+27
-5
lines changed

3 files changed

+27
-5
lines changed

Diff for: docs/docs/configuration.md

+4
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,10 @@ Defaults to `true`.
112112
Create the virtualenv inside the project's root directory.
113113
Defaults to `false`.
114114

115+
If set to `true`, the virtualenv wil be created and expected in a folder named `.venv` within the root directory of the project.
116+
117+
If set to `None`, `poetry` will use the virtualenv from the `.venv` directory only if available.
118+
115119
### `virtualenvs.path`: string
116120

117121
Directory where virtual environments will be created.

Diff for: poetry/utils/env.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ def get(self, reload=False): # type: (bool) -> Env
347347
if not in_venv or env is not None:
348348
# Checking if a local virtualenv exists
349349
if (cwd / ".venv").exists() and (cwd / ".venv").is_dir():
350-
if self._poetry.config.get("virtualenvs.in-project"):
350+
if self._poetry.config.get("virtualenvs.in-project") is not False:
351351
venv = cwd / ".venv"
352352

353353
return VirtualEnv(venv)

Diff for: tests/utils/test_env.py

+22-4
Original file line numberDiff line numberDiff line change
@@ -74,17 +74,35 @@ def test_virtualenvs_with_spaces_in_their_path_work_as_expected(tmp_dir, manager
7474
assert venv.run("python", "-V", shell=True).startswith("Python")
7575

7676

77-
def test_env_get_in_project_venv(manager, poetry):
77+
@pytest.mark.parametrize("in_project", [True, None])
78+
def test_env_get_in_project_venv_with_venv_folder_present(manager, poetry, in_project):
7879
if "VIRTUAL_ENV" in os.environ:
7980
del os.environ["VIRTUAL_ENV"]
8081

81-
(poetry.file.parent / ".venv").mkdir()
82+
venv_folder = Path(poetry.file.parent) / ".venv"
83+
venv_folder.mkdir()
84+
poetry.config.config["virtualenvs"]["in-project"] = in_project
8285

8386
venv = manager.get()
8487

85-
assert venv.path == poetry.file.parent / ".venv"
88+
assert venv.path == venv_folder
8689

87-
shutil.rmtree(str(venv.path))
90+
shutil.rmtree(str(venv_folder))
91+
92+
93+
def test_env_get_venv_with_venv_folder_present(manager, poetry):
94+
if "VIRTUAL_ENV" in os.environ:
95+
del os.environ["VIRTUAL_ENV"]
96+
97+
venv_folder = Path(poetry.file.parent) / ".venv"
98+
venv_folder.mkdir()
99+
poetry.config.config["virtualenvs"]["in-project"] = False
100+
101+
venv = manager.get()
102+
103+
assert venv.path != venv_folder
104+
105+
shutil.rmtree(str(venv_folder))
88106

89107

90108
def build_venv(path, executable=None): # type: (Union[Path,str], Optional[str]) -> ()

0 commit comments

Comments
 (0)