1
0
forked from VimPlug/jedi

Make it possible to connect to a subprocess to get the sys path

This commit is contained in:
Dave Halter
2017-11-14 18:25:37 +01:00
parent 46b81dfa6d
commit 96149d2e6a
7 changed files with 51 additions and 52 deletions

View File

@@ -1,5 +1,6 @@
import os
import re
import sys
import sysconfig
from subprocess import CalledProcessError
from collections import namedtuple
@@ -7,7 +8,7 @@ from collections import namedtuple
from jedi._compatibility import check_output
from jedi.evaluate.project import Project
from jedi.cache import memoize_method
from jedi.evaluate.compiled.subprocess import get_subprocess
_VersionInfo = namedtuple('VersionInfo', 'major minor micro')
@@ -28,6 +29,10 @@ class Environment(object):
def get_project(self):
return Project(self.get_sys_path())
def get_subprocess(self):
return get_subprocess(self._executable)
@memoize_method
def get_sys_path(self):
vars = {
'base': self._path
@@ -38,35 +43,15 @@ class Environment(object):
# on how the Python version was compiled (ENV variables).
# If you omit -S when starting Python (normal case), additionally
# site.py gets executed.
write
# venv
['', '/usr/lib/python3.3', '/usr/lib/python3.3/plat-x86_64-linux-gnu',
'/usr/lib/python3.3/lib-dynload',
'/home/dave/source/python/virtenv/venv3.3/lib/python3.3/site-packages']
['/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu',
'/usr/lib/python3.4/lib-dynload',
'/home/dave/source/stuff_cloudscale/rgw-metrics/venv/lib/python3.4/site-packages']
['', '/usr/lib/python35.zip', '/usr/lib/python3.5',
'/usr/lib/python3.5/plat-x86_64-linux-gnu',
'/usr/lib/python3.5/lib-dynload',
'/home/dave/source/python/virtenv/venv3.5/lib/python3.5/site-packages']
return self.get_subprocess().get_sys_path()
{'purelib': '{base}/local/lib/python{py_version_short}/dist-packages',
'stdlib': '{base}/lib/python{py_version_short}',
'scripts': '{base}/local/bin',
'platinclude': '{platbase}/local/include/python{py_version_short}',
'include': '{base}/local/include/python{py_version_short}',
'data': '{base}/local',
'platstdlib': '{platbase}/lib/python{py_version_short}',
'platlib': '{platbase}/local/lib/python{py_version_short}/dist-packages'}
return [] + additional_paths
def _get_long_running_process(self):
return process
class DefaultEnvironment(Environment):
def __init__(self, script_path):
# TODO make this usable
path = script_path
super(DefaultEnvironment, self).__init__(path, sys.executable)
def find_virtualenvs(paths=None):
@@ -95,11 +80,11 @@ def _get_executable_path(path):
def _get_version(executable):
try:
output = check_output(executable, '--version')
output = check_output([executable, '--version'])
except (CalledProcessError, OSError):
raise NoVirtualEnv()
match = re.match(r'Python (\d+)\.(\d+)\.(\d+)', output)
match = re.match(rb'Python (\d+)\.(\d+)\.(\d+)', output)
if match is None:
raise NoVirtualEnv()