Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/pip/_internal/locations/base.py: 62%
39 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:48 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:48 +0000
1import functools
2import os
3import site
4import sys
5import sysconfig
6import typing
8from pip._internal.exceptions import InstallationError
9from pip._internal.utils import appdirs
10from pip._internal.utils.virtualenv import running_under_virtualenv
12# Application Directories
13USER_CACHE_DIR = appdirs.user_cache_dir("pip")
15# FIXME doesn't account for venv linked to global site-packages
16site_packages: str = sysconfig.get_path("purelib")
19def get_major_minor_version() -> str:
20 """
21 Return the major-minor version of the current Python as a string, e.g.
22 "3.7" or "3.10".
23 """
24 return "{}.{}".format(*sys.version_info)
27def change_root(new_root: str, pathname: str) -> str:
28 """Return 'pathname' with 'new_root' prepended.
30 If 'pathname' is relative, this is equivalent to os.path.join(new_root, pathname).
31 Otherwise, it requires making 'pathname' relative and then joining the
32 two, which is tricky on DOS/Windows and Mac OS.
34 This is borrowed from Python's standard library's distutils module.
35 """
36 if os.name == "posix":
37 if not os.path.isabs(pathname):
38 return os.path.join(new_root, pathname)
39 else:
40 return os.path.join(new_root, pathname[1:])
42 elif os.name == "nt":
43 (drive, path) = os.path.splitdrive(pathname)
44 if path[0] == "\\":
45 path = path[1:]
46 return os.path.join(new_root, path)
48 else:
49 raise InstallationError(
50 f"Unknown platform: {os.name}\n"
51 "Can not change root path prefix on unknown platform."
52 )
55def get_src_prefix() -> str:
56 if running_under_virtualenv():
57 src_prefix = os.path.join(sys.prefix, "src")
58 else:
59 # FIXME: keep src in cwd for now (it is not a temporary folder)
60 try:
61 src_prefix = os.path.join(os.getcwd(), "src")
62 except OSError:
63 # In case the current working directory has been renamed or deleted
64 sys.exit("The folder you are executing pip from can no longer be found.")
66 # under macOS + virtualenv sys.prefix is not properly resolved
67 # it is something like /path/to/python/bin/..
68 return os.path.abspath(src_prefix)
71try:
72 # Use getusersitepackages if this is present, as it ensures that the
73 # value is initialised properly.
74 user_site: typing.Optional[str] = site.getusersitepackages()
75except AttributeError:
76 user_site = site.USER_SITE
79@functools.lru_cache(maxsize=None)
80def is_osx_framework() -> bool:
81 return bool(sysconfig.get_config_var("PYTHONFRAMEWORK"))