def get_site_packages_dirs(python_executable: Optional[str]) -> Tuple[List[str], List[str]]: """Find package directories for given python. This runs a subprocess call, which generates a list of the egg directories, and the site package directories. To avoid repeatedly calling a subprocess (which can be slow!) we lru_cache the results.""" def make_abspath(path: str, root: str) -> str: """Take a path and make it absolute relative to root if not already absolute.""" if os.path.isabs(path): return os.path.normpath(path) else: return os.path.join(root, os.path.normpath(path)) if python_executable is None: return [], [] if python_executable == sys.executable: # Use running Python's package dirs site_packages = sitepkgs.getsitepackages() else: # Use subprocess to get the package directory of given Python # executable site_packages = ast.literal_eval( subprocess.check_output([python_executable, sitepkgs.__file__], stderr=subprocess.PIPE).decode()) egg_dirs = [] for dir in site_packages: pth = os.path.join(dir, 'easy-install.pth') if os.path.isfile(pth): with open(pth) as f: egg_dirs.extend([make_abspath(d.rstrip(), dir) for d in f.readlines()]) return egg_dirs, site_packages
def get_site_packages_dirs(python_executable: str) -> Tuple[List[str], List[str]]: """Find package directories for given python. This runs a subprocess call, which generates a list of the egg directories, and the site package directories. To avoid repeatedly calling a subprocess (which can be slow!) we lru_cache the results.""" def make_abspath(path: str, root: str) -> str: """Take a path and make it absolute relative to root if not already absolute.""" if os.path.isabs(path): return os.path.normpath(path) else: return os.path.join(root, os.path.normpath(path)) if python_executable == sys.executable: # Use running Python's package dirs site_packages = sitepkgs.getsitepackages() else: # Use subprocess to get the package directory of given Python # executable site_packages = ast.literal_eval( subprocess.check_output([python_executable, sitepkgs.__file__], stderr=subprocess.PIPE).decode()) egg_dirs = [] for dir in site_packages: pth = os.path.join(dir, 'easy-install.pth') if os.path.isfile(pth): with open(pth) as f: egg_dirs.extend([make_abspath(d.rstrip(), dir) for d in f.readlines()]) return egg_dirs, site_packages
def get_site_packages_dirs(python_executable: str) -> Tuple[List[str], List[str]]: """Find package directories for given python. This runs a subprocess call, which generates a list of the egg directories, and the site package directories. To avoid repeatedly calling a subprocess (which can be slow!) we lru_cache the results.""" if python_executable == sys.executable: # Use running Python's package dirs site_packages = sitepkgs.getsitepackages() else: # Use subprocess to get the package directory of given Python # executable site_packages = ast.literal_eval( subprocess.check_output([python_executable, sitepkgs.__file__], stderr=subprocess.PIPE).decode()) return expand_site_packages(site_packages)
print(sitepkgs.getsitepackages()). In order to add bazel-managed pip dependencies to the search path, we provide this executable as the "python executable" for mypy to use when it wants to find site packages, and add our bazel external packages to the search path. """ import sys import os from mypy import sitepkgs def external_packages(): r = [] for dir in os.listdir('external/'): fulld = os.path.abspath(os.path.join('external', dir)) if not os.path.isdir(fulld): continue r.append(fulld) for dir2 in os.listdir(fulld): fulld2 = os.path.abspath(os.path.join(fulld, dir2)) if not os.path.isdir(fulld2): continue r.append(fulld2) return r if __name__ == '__main__': pkgs = sitepkgs.getsitepackages() print(repr(pkgs + external_packages()))