diff --git a/jedi/api/environment.py b/jedi/api/environment.py index 6ea44a4d..d888c038 100644 --- a/jedi/api/environment.py +++ b/jedi/api/environment.py @@ -97,6 +97,12 @@ class InterpreterEnvironment(_BaseEnvironment): def get_default_environment(): + virtual_env = os.environ.get('VIRTUAL_ENV') + if virtual_env is not None and virtual_env != sys.prefix: + try: + return create_environment(virtual_env) + except InvalidPythonEnvironment: + pass return DefaultEnvironment() diff --git a/test/test_api/test_environment.py b/test/test_api/test_environment.py index 13bf26ad..0372a1c6 100644 --- a/test/test_api/test_environment.py +++ b/test/test_api/test_environment.py @@ -1,3 +1,7 @@ +import os +import sys +from contextlib import contextmanager + import pytest import jedi @@ -71,3 +75,21 @@ def test_killed_subprocess(evaluator, Script): def_, = Script('str').goto_definitions() # Jedi should now work again. assert def_.name == 'str' + + +@contextmanager +def set_environment_variable(name, value): + tmp = os.environ.get(name) + try: + os.environ[name] = value + yield + finally: + if tmp is None: + del os.environ[name] + else: + os.environ[name] = tmp + + +def test_virtualenv(): + with set_environment_variable('VIRTUAL_ENV', '/foo/bar/jedi_baz'): + assert get_default_environment()._executable == sys.executable