Skip to content

Commit

Permalink
Merge pull request #11987 from pfmoore/revert_56e5fa3
Browse files Browse the repository at this point in the history
Revert addition of "base" config location
  • Loading branch information
pfmoore authored Apr 22, 2023
2 parents 87678ee + b64e74d commit d5a779d
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 63 deletions.
21 changes: 5 additions & 16 deletions docs/html/topics/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,13 @@ and how they are related to pip's various command line options.

## Configuration Files

Configuration files can change the default values for command line options.
They are written using standard INI style configuration files.
Configuration files can change the default values for command line option.
They are written using a standard INI style configuration files.

pip has 4 "levels" of configuration files:
pip has 3 "levels" of configuration files:

- `global`: system-wide configuration file, shared across all users.
- `user`: per-user configuration file, shared across all environments.
- `base` : per-base environment configuration file, shared across all virtualenvs with the same base. (available since pip 23.0)
- `global`: system-wide configuration file, shared across users.
- `user`: per-user configuration file.
- `site`: per-environment configuration file; i.e. per-virtualenv.

### Location
Expand All @@ -48,9 +47,6 @@ User
The legacy "per-user" configuration file is also loaded, if it exists: {file}`$HOME/.pip/pip.conf`.
Base
: {file}`\{sys.base_prefix\}/pip.conf`
Site
: {file}`$VIRTUAL_ENV/pip.conf`
```
Expand All @@ -67,9 +63,6 @@ User
The legacy "per-user" configuration file is also loaded, if it exists: {file}`$HOME/.pip/pip.conf`.
Base
: {file}`\{sys.base_prefix\}/pip.conf`
Site
: {file}`$VIRTUAL_ENV/pip.conf`
```
Expand All @@ -88,9 +81,6 @@ User
The legacy "per-user" configuration file is also loaded, if it exists: {file}`%HOME%\\pip\\pip.ini`
Base
: {file}`\{sys.base_prefix\}\\pip.ini`
Site
: {file}`%VIRTUAL_ENV%\\pip.ini`
```
Expand All @@ -112,7 +102,6 @@ order:
- `PIP_CONFIG_FILE`, if given.
- Global
- User
- Base
- Site

Each file read overrides any values read from previous files, so if the
Expand Down
1 change: 1 addition & 0 deletions news/11987.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Revert `#11487 <https://github.com/pypa/pip/pull/11487>`_, as it causes issues with virtualenvs created by the Windows Store distribution of Python.
18 changes: 3 additions & 15 deletions src/pip/_internal/configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,20 +36,12 @@
kinds = enum(
USER="user", # User Specific
GLOBAL="global", # System Wide
BASE="base", # Base environment specific (e.g. for all venvs with the same base)
SITE="site", # Environment Specific (e.g. per venv)
SITE="site", # [Virtual] Environment Specific
ENV="env", # from PIP_CONFIG_FILE
ENV_VAR="env-var", # from Environment Variables
)
OVERRIDE_ORDER = (
kinds.GLOBAL,
kinds.USER,
kinds.BASE,
kinds.SITE,
kinds.ENV,
kinds.ENV_VAR,
)
VALID_LOAD_ONLY = kinds.USER, kinds.GLOBAL, kinds.BASE, kinds.SITE
OVERRIDE_ORDER = kinds.GLOBAL, kinds.USER, kinds.SITE, kinds.ENV, kinds.ENV_VAR
VALID_LOAD_ONLY = kinds.USER, kinds.GLOBAL, kinds.SITE

logger = getLogger(__name__)

Expand Down Expand Up @@ -78,7 +70,6 @@ def get_configuration_files() -> Dict[Kind, List[str]]:
os.path.join(path, CONFIG_BASENAME) for path in appdirs.site_config_dirs("pip")
]

base_config_file = os.path.join(sys.base_prefix, CONFIG_BASENAME)
site_config_file = os.path.join(sys.prefix, CONFIG_BASENAME)
legacy_config_file = os.path.join(
os.path.expanduser("~"),
Expand All @@ -87,7 +78,6 @@ def get_configuration_files() -> Dict[Kind, List[str]]:
)
new_config_file = os.path.join(appdirs.user_config_dir("pip"), CONFIG_BASENAME)
return {
kinds.BASE: [base_config_file],
kinds.GLOBAL: global_config_files,
kinds.SITE: [site_config_file],
kinds.USER: [legacy_config_file, new_config_file],
Expand Down Expand Up @@ -354,8 +344,6 @@ def iter_config_files(self) -> Iterable[Tuple[Kind, List[str]]]:
# The legacy config file is overridden by the new config file
yield kinds.USER, config_files[kinds.USER]

yield kinds.BASE, config_files[kinds.BASE]

# finally virtualenv configuration first trumping others
yield kinds.SITE, config_files[kinds.SITE]

Expand Down
33 changes: 2 additions & 31 deletions tests/unit/test_configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,11 @@ def test_user_loading(self) -> None:
self.configuration.load()
assert self.configuration.get_value("test.hello") == "2"

def test_base_loading(self) -> None:
self.patch_configuration(kinds.BASE, {"test.hello": "3"})

self.configuration.load()
assert self.configuration.get_value("test.hello") == "3"

def test_site_loading(self) -> None:
self.patch_configuration(kinds.SITE, {"test.hello": "4"})
self.patch_configuration(kinds.SITE, {"test.hello": "3"})

self.configuration.load()
assert self.configuration.get_value("test.hello") == "4"
assert self.configuration.get_value("test.hello") == "3"

def test_environment_config_loading(self, monkeypatch: pytest.MonkeyPatch) -> None:
contents = """
Expand Down Expand Up @@ -113,15 +107,6 @@ def test_no_such_key_error_message_missing_option(self) -> None:
with pytest.raises(ConfigurationError, match=pat):
self.configuration.get_value("global.index-url")

def test_overrides_normalization(self) -> None:
# Check that normalized names are used in precedence calculations.
# Reminder: USER has higher precedence than GLOBAL.
self.patch_configuration(kinds.USER, {"test.hello-world": "1"})
self.patch_configuration(kinds.GLOBAL, {"test.hello_world": "0"})
self.configuration.load()

assert self.configuration.get_value("test.hello_world") == "1"


class TestConfigurationPrecedence(ConfigurationMixin):
# Tests for methods to that determine the order of precedence of
Expand All @@ -148,13 +133,6 @@ def test_env_overides_global(self) -> None:

assert self.configuration.get_value("test.hello") == "0"

def test_site_overides_base(self) -> None:
self.patch_configuration(kinds.BASE, {"test.hello": "2"})
self.patch_configuration(kinds.SITE, {"test.hello": "1"})
self.configuration.load()

assert self.configuration.get_value("test.hello") == "1"

def test_site_overides_user(self) -> None:
self.patch_configuration(kinds.USER, {"test.hello": "2"})
self.patch_configuration(kinds.SITE, {"test.hello": "1"})
Expand All @@ -169,13 +147,6 @@ def test_site_overides_global(self) -> None:

assert self.configuration.get_value("test.hello") == "1"

def test_base_overides_user(self) -> None:
self.patch_configuration(kinds.USER, {"test.hello": "2"})
self.patch_configuration(kinds.BASE, {"test.hello": "1"})
self.configuration.load()

assert self.configuration.get_value("test.hello") == "1"

def test_user_overides_global(self) -> None:
self.patch_configuration(kinds.GLOBAL, {"test.hello": "3"})
self.patch_configuration(kinds.USER, {"test.hello": "2"})
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/test_options.py
Original file line number Diff line number Diff line change
Expand Up @@ -587,7 +587,7 @@ def test_venv_config_file_found(self, monkeypatch: pytest.MonkeyPatch) -> None:
for _, val in cp.iter_config_files():
files.extend(val)

assert len(files) == 5
assert len(files) == 4

@pytest.mark.parametrize(
"args, expect",
Expand Down

0 comments on commit d5a779d

Please sign in to comment.