forked from VimPlug/jedi
The problem was that adding stuff to sys.path is simply very risky, because it already caused import issues (because enum was installed in 2.7). It was bound to cause other issues
38 lines
1008 B
Python
38 lines
1008 B
Python
import sys
|
|
import os
|
|
|
|
from importlib.machinery import FileFinder
|
|
|
|
|
|
class ExactImporter(object):
|
|
def __init__(self, path_dct):
|
|
self._path_dct = path_dct
|
|
|
|
def find_module(self, fullname, path=None):
|
|
if path is None and fullname in self._path_dct:
|
|
loader, _ = FileFinder(self._path_dct[fullname]).find_loader(fullname)
|
|
return loader
|
|
return None
|
|
|
|
|
|
def _create_importer():
|
|
# Get the path to jedi.
|
|
_d = os.path.dirname
|
|
_jedi_path = _d(_d(_d(_d(_d(__file__)))))
|
|
_parso_path = sys.argv[1]
|
|
# The paths are the directory that jedi and parso lie in.
|
|
return ExactImporter({'jedi': _jedi_path, 'parso': _parso_path})
|
|
|
|
|
|
# Remove the first entry, because it's simply a directory entry that equals
|
|
# this directory.
|
|
del sys.path[0]
|
|
|
|
# Try to import jedi/parso.
|
|
sys.meta_path.insert(0, _create_importer())
|
|
from jedi.evaluate.compiled import subprocess # NOQA
|
|
sys.meta_path.pop(0)
|
|
|
|
# And finally start the client.
|
|
subprocess.Listener().listen()
|