Add minimal dependencies to Python path

Only add pythonfutures on Python 2. The concurrent.futures module is
part of the standard library on Python 3.
This commit is contained in:
micbou 2018-09-28 22:06:26 +02:00
parent a98bc72668
commit 040582c107
No known key found for this signature in database
GPG Key ID: C7E8FD1F3BDA1E05
2 changed files with 38 additions and 22 deletions

View File

@ -29,6 +29,7 @@
# For more information, please refer to <http://unlicense.org/>
import os
import subprocess
DIR_OF_THIS_SCRIPT = os.path.abspath( os.path.dirname( __file__ ) )
DIR_OF_THIRD_PARTY = os.path.join( DIR_OF_THIS_SCRIPT, 'third_party' )
@ -46,19 +47,23 @@ def GetStandardLibraryIndexInSysPath( sys_path ):
def PythonSysPath( **kwargs ):
sys_path = kwargs[ 'sys_path' ]
for folder in os.listdir( DIR_OF_THIRD_PARTY ):
sys_path.insert( 0, os.path.realpath( os.path.join( DIR_OF_THIRD_PARTY,
folder ) ) )
dependencies = [ os.path.join( DIR_OF_THIS_SCRIPT, 'python' ),
os.path.join( DIR_OF_THIRD_PARTY, 'requests-futures' ),
os.path.join( DIR_OF_THIRD_PARTY, 'ycmd' ),
os.path.join( DIR_OF_YCMD_THIRD_PARTY, 'frozendict' ),
os.path.join( DIR_OF_YCMD_THIRD_PARTY, 'requests' ) ]
for folder in os.listdir( DIR_OF_YCMD_THIRD_PARTY ):
if folder == 'python-future':
folder = os.path.join( folder, 'src' )
# The concurrent.futures module is part of the standard library on Python 3.
interpreter_path = kwargs[ 'interpreter_path' ]
major_version = int( subprocess.check_output( [
interpreter_path, '-c', 'import sys; print( sys.version_info[ 0 ] )' ]
).rstrip().decode( 'utf8' ) )
if major_version == 2:
dependencies.append( os.path.join( DIR_OF_THIRD_PARTY, 'pythonfutures' ) )
sys_path[ 0:0 ] = dependencies
sys_path.insert( GetStandardLibraryIndexInSysPath( sys_path ) + 1,
os.path.realpath( os.path.join( DIR_OF_YCMD_THIRD_PARTY,
folder ) ) )
continue
sys_path.insert( 0, os.path.realpath( os.path.join( DIR_OF_YCMD_THIRD_PARTY,
folder ) ) )
os.path.join( DIR_OF_YCMD_THIRD_PARTY, 'python-future',
'src' ) )
return sys_path

View File

@ -186,23 +186,34 @@ from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
import os
import os.path as p
import sys
import traceback
import vim
# Add python sources folder to the system path.
script_folder = vim.eval( 's:script_folder_path' )
sys.path.insert( 0, os.path.join( script_folder, '..', 'python' ) )
sys.path.insert( 0, os.path.join( script_folder, '..', 'third_party', 'ycmd' ) )
root_folder = p.normpath( p.join( vim.eval( 's:script_folder_path' ), '..' ) )
third_party_folder = p.join( root_folder, 'third_party' )
ycmd_third_party_folder = p.join( third_party_folder, 'ycmd', 'third_party' )
# Add dependencies to Python path.
dependencies = [ p.join( root_folder, 'python' ),
p.join( third_party_folder, 'requests-futures' ),
p.join( third_party_folder, 'ycmd' ),
p.join( ycmd_third_party_folder, 'frozendict' ),
p.join( ycmd_third_party_folder, 'requests' ) ]
# The concurrent.futures module is part of the standard library on Python 3.
if sys.version_info[ 0 ] == 2:
dependencies.append( p.join( third_party_folder, 'pythonfutures' ) )
sys.path[ 0:0 ] = dependencies
# We enclose this code in a try/except block to avoid backtraces in Vim.
try:
from ycmd import server_utils as su
su.AddNearestThirdPartyFoldersToSysPath( script_folder )
# We need to import ycmd's third_party folders as well since we import and
# use ycmd code in the client.
su.AddNearestThirdPartyFoldersToSysPath( su.__file__ )
# The python-future module must be inserted after the standard library path.
from ycmd.server_utils import GetStandardLibraryIndexInSysPath
sys.path.insert( GetStandardLibraryIndexInSysPath() + 1,
p.join( ycmd_third_party_folder, 'python-future', 'src' ) )
# Import the modules used in this file.
from ycm import base, vimsupport, youcompleteme