from __future__ import absolute_import import io import logging import os import re import site import sys from pip._internal.utils.typing import MYPY_CHECK_RUNNING if MYPY_CHECK_RUNNING: from typing import List, Optional logger = logging.getLogger(__name__) _INCLUDE_SYSTEM_SITE_PACKAGES_REGEX = re.compile( r"include-system-site-packages\s*=\s*(?P<value>true|false)" ) def _running_under_venv(): # type: () -> bool """Checks if sys.base_prefix and sys.prefix match. This handles PEP 405 compliant virtual environments. """ return sys.prefix != getattr(sys, "base_prefix", sys.prefix) def _running_under_regular_virtualenv(): # type: () -> bool """Checks if sys.real_prefix is set. This handles virtual environments created with pypa's virtualenv. """ # pypa/virtualenv case return hasattr(sys, 'real_prefix') def running_under_virtualenv(): # type: () -> bool """Return True if we're running inside a virtualenv, False otherwise. """ return _running_under_venv() or _running_under_regular_virtualenv() def _get_pyvenv_cfg_lines(): # type: () -> Optional[List[str]] """Reads {sys.prefix}/pyvenv.cfg and returns its contents as list of lines Returns None, if it could not read/access the file. """ pyvenv_cfg_file = os.path.join(sys.prefix, 'pyvenv.cfg') try: # Although PEP 405 does not specify, the built-in venv module always # writes with UTF-8. (pypa/pip#8717) with io.open(pyvenv_cfg_file, encoding='utf-8') as f: return f.read().splitlines() # avoids trailing newlines except IOError: return None def _no_global_under_venv(): # type: () -> bool """Check `{sys.prefix}/pyvenv.cfg` for system site-packages inclusion PEP 405 specifies that when system site-packages are not supposed to be visible from a virtual environment, `pyvenv.cfg` must contain the following line: include-system-site-packages = false Additionally, log a warning if accessing the file fails. """ cfg_lines = _get_pyvenv_cfg_lines() if cfg_lines is None: # We're not in a "sane" venv, so assume there is no system # site-packages access (since that's PEP 405's default state). logger.warning( "Could not access 'pyvenv.cfg' despite a virtual environment " "being active. Assuming global site-packages is not accessible " "in this environment." ) return True for line in cfg_lines: match = _INCLUDE_SYSTEM_SITE_PACKAGES_REGEX.match(line) if match is not None and match.group('value') == 'false': return True return False def _no_global_under_regular_virtualenv(): # type: () -> bool """Check if "no-global-site-packages.txt" exists beside site.py This mirrors logic in pypa/virtualenv for determining whether system site-packages are visible in the virtual environment. """ site_mod_dir = os.path.dirname(os.path.abspath(site.__file__)) no_global_site_packages_file = os.path.join( site_mod_dir, 'no-global-site-packages.txt', ) return os.path.exists(no_global_site_packages_file) def virtualenv_no_global(): # type: () -> bool """Returns a boolean, whether running in venv with no system site-packages. """ # PEP 405 compliance needs to be checked first since virtualenv >=20 would # return True for both checks, but is only able to use the PEP 405 config. if _running_under_venv(): return _no_global_under_venv() if _running_under_regular_virtualenv(): return _no_global_under_regular_virtualenv() return False
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
__pycache__ | Folder | 0755 |
|
|
.__init__.pyo.40009 | File | 164 B | 0644 |
|
.appdirs.pyo.40009 | File | 1.78 KB | 0644 |
|
.compat.pyo.40009 | File | 8.62 KB | 0644 |
|
.compatibility_tags.pyo.40009 | File | 4.45 KB | 0644 |
|
.datetime.pyo.40009 | File | 625 B | 0644 |
|
.deprecation.pyo.40009 | File | 3.44 KB | 0644 |
|
.distutils_args.pyo.40009 | File | 1.6 KB | 0644 |
|
.entrypoints.pyo.40009 | File | 1.47 KB | 0644 |
|
.filetypes.pyo.40009 | File | 792 B | 0644 |
|
.glibc.pyo.40009 | File | 2.19 KB | 0644 |
|
.hashes.pyo.40009 | File | 5.68 KB | 0644 |
|
.inject_securetransport.pyo.40009 | File | 1.07 KB | 0644 |
|
.logging.pyo.40009 | File | 11.6 KB | 0644 |
|
.misc.pyo.40009 | File | 32.2 KB | 0644 |
|
.models.pyo.40009 | File | 2.55 KB | 0644 |
|
.packaging.pyo.40009 | File | 3.27 KB | 0644 |
|
.parallel.pyo.40009 | File | 3.62 KB | 0644 |
|
.pkg_resources.pyo.40009 | File | 2.39 KB | 0644 |
|
.typing.pyo.40009 | File | 1.52 KB | 0644 |
|
.virtualenv.pyo.40009 | File | 4.11 KB | 0644 |
|
.wheel.pyo.40009 | File | 7.27 KB | 0644 |
|
__init__.py | File | 0 B | 0644 |
|
__init__.pyc | File | 164 B | 0644 |
|
__init__.pyo | File | 164 B | 0644 |
|
appdirs.py | File | 1.32 KB | 0644 |
|
appdirs.pyc | File | 1.78 KB | 0644 |
|
appdirs.pyo | File | 1.78 KB | 0644 |
|
compat.py | File | 9.27 KB | 0644 |
|
compat.pyc | File | 8.62 KB | 0644 |
|
compat.pyo | File | 8.62 KB | 0644 |
|
compatibility_tags.py | File | 5.31 KB | 0644 |
|
compatibility_tags.pyc | File | 4.45 KB | 0644 |
|
compatibility_tags.pyo | File | 4.45 KB | 0644 |
|
datetime.py | File | 295 B | 0644 |
|
datetime.pyc | File | 625 B | 0644 |
|
datetime.pyo | File | 625 B | 0644 |
|
deprecation.py | File | 3.24 KB | 0644 |
|
deprecation.pyc | File | 3.44 KB | 0644 |
|
deprecation.pyo | File | 3.44 KB | 0644 |
|
direct_url_helpers.py | File | 4.26 KB | 0644 |
|
direct_url_helpers.pyc | File | 3.37 KB | 0644 |
|
direct_url_helpers.pyo | File | 3.24 KB | 0644 |
|
distutils_args.py | File | 1.32 KB | 0644 |
|
distutils_args.pyc | File | 1.6 KB | 0644 |
|
distutils_args.pyo | File | 1.6 KB | 0644 |
|
encoding.py | File | 1.25 KB | 0644 |
|
encoding.pyc | File | 1.61 KB | 0644 |
|
encoding.pyo | File | 1.56 KB | 0644 |
|
entrypoints.py | File | 1.19 KB | 0644 |
|
entrypoints.pyc | File | 1.47 KB | 0644 |
|
entrypoints.pyo | File | 1.47 KB | 0644 |
|
filesystem.py | File | 6.78 KB | 0644 |
|
filesystem.pyc | File | 7.4 KB | 0644 |
|
filesystem.pyo | File | 7.35 KB | 0644 |
|
filetypes.py | File | 571 B | 0644 |
|
filetypes.pyc | File | 792 B | 0644 |
|
filetypes.pyo | File | 792 B | 0644 |
|
glibc.py | File | 3.22 KB | 0644 |
|
glibc.pyc | File | 2.19 KB | 0644 |
|
glibc.pyo | File | 2.19 KB | 0644 |
|
hashes.py | File | 4.57 KB | 0644 |
|
hashes.pyc | File | 5.68 KB | 0644 |
|
hashes.pyo | File | 5.68 KB | 0644 |
|
inject_securetransport.py | File | 810 B | 0644 |
|
inject_securetransport.pyc | File | 1.07 KB | 0644 |
|
inject_securetransport.pyo | File | 1.07 KB | 0644 |
|
logging.py | File | 12.79 KB | 0644 |
|
logging.pyc | File | 11.6 KB | 0644 |
|
logging.pyo | File | 11.6 KB | 0644 |
|
misc.py | File | 27.67 KB | 0644 |
|
misc.pyc | File | 32.2 KB | 0644 |
|
misc.pyo | File | 32.2 KB | 0644 |
|
models.py | File | 1.17 KB | 0644 |
|
models.pyc | File | 2.55 KB | 0644 |
|
models.pyo | File | 2.55 KB | 0644 |
|
packaging.py | File | 2.96 KB | 0644 |
|
packaging.pyc | File | 3.27 KB | 0644 |
|
packaging.pyo | File | 3.27 KB | 0644 |
|
parallel.py | File | 3.32 KB | 0644 |
|
parallel.pyc | File | 3.62 KB | 0644 |
|
parallel.pyo | File | 3.62 KB | 0644 |
|
pkg_resources.py | File | 1.22 KB | 0644 |
|
pkg_resources.pyc | File | 2.39 KB | 0644 |
|
pkg_resources.pyo | File | 2.39 KB | 0644 |
|
setuptools_build.py | File | 4.94 KB | 0644 |
|
setuptools_build.pyc | File | 3.83 KB | 0644 |
|
setuptools_build.pyo | File | 3.75 KB | 0644 |
|
subprocess.py | File | 9.69 KB | 0644 |
|
subprocess.pyc | File | 6.77 KB | 0644 |
|
subprocess.pyo | File | 6.69 KB | 0644 |
|
temp_dir.py | File | 8.18 KB | 0644 |
|
temp_dir.pyc | File | 8.75 KB | 0644 |
|
temp_dir.pyo | File | 8.62 KB | 0644 |
|
typing.py | File | 1.37 KB | 0644 |
|
typing.pyc | File | 1.52 KB | 0644 |
|
typing.pyo | File | 1.52 KB | 0644 |
|
unpacking.py | File | 9.27 KB | 0644 |
|
unpacking.pyc | File | 7.83 KB | 0644 |
|
unpacking.pyo | File | 7.79 KB | 0644 |
|
urls.py | File | 1.49 KB | 0644 |
|
urls.pyc | File | 1.94 KB | 0644 |
|
urls.pyo | File | 1.8 KB | 0644 |
|
virtualenv.py | File | 3.62 KB | 0644 |
|
virtualenv.pyc | File | 4.11 KB | 0644 |
|
virtualenv.pyo | File | 4.11 KB | 0644 |
|
wheel.py | File | 7.13 KB | 0644 |
|
wheel.pyc | File | 7.27 KB | 0644 |
|
wheel.pyo | File | 7.27 KB | 0644 |
|