diff --git a/pipenv/core.py b/pipenv/core.py index 6fe230c8a1..4346f48727 100644 --- a/pipenv/core.py +++ b/pipenv/core.py @@ -911,7 +911,6 @@ def do_create_virtualenv(python=None, site_packages=False): '-m', 'pipenv.pew', 'new', - project.virtualenv_name, '-d', '-a', project.project_directory, @@ -929,6 +928,8 @@ def do_create_virtualenv(python=None, site_packages=False): err=True, ) cmd = cmd + ['-p', python] + if not project.is_venv_in_project(): + cmd = cmd + ['--', project.virtualenv_name] # Actually create the virtualenv. with spinner(): try: diff --git a/tests/integration/test_pipenv.py b/tests/integration/test_pipenv.py index 82117704dc..7077d6e7e6 100644 --- a/tests/integration/test_pipenv.py +++ b/tests/integration/test_pipenv.py @@ -2,11 +2,20 @@ XXX: Try our best to reduce tests in this file. """ +import os +from tempfile import gettempdir, mkdtemp + +import mock +import pytest from pipenv.core import activate_virtualenv from pipenv.project import Project from pipenv.vendor import delegator -import pytest + +try: + from pathlib import Path +except ImportError: + from pipenv.vendor.pathlib2 import Path @pytest.mark.code @@ -92,3 +101,26 @@ def test_proper_names_unamanged_virtualenv(PipenvInstance, pypi): assert c.return_code == 0 project = Project() assert project.proper_names == [] + + +@pytest.mark.cli +def test_directory_with_leading_dash(PipenvInstance): + def mocked_mkdtemp(suffix, prefix, dir): + if suffix == '-project': + temp_dir = Path(gettempdir()) / '-dir-with-leading-dash' + temp_dir.mkdir() + return str(temp_dir) + else: + return mkdtemp(suffix, prefix, dir) + + with mock.patch('pipenv._compat.mkdtemp', side_effect=mocked_mkdtemp): + with PipenvInstance(chdir=True) as p: + # This environment variable is set in the context manager and will + # cause pipenv to use virtualenv, not pew. + del os.environ['PIPENV_VENV_IN_PROJECT'] + p.pipenv('--python python') + venv_path = p.pipenv('--venv').out.strip() + assert os.path.isdir(venv_path) + # Manually clean up environment, since PipenvInstance assumes that + # the virutalenv is in the project directory. + p.pipenv('--rm') \ No newline at end of file