diff --git a/changelog/824.feature.rst b/changelog/824.feature.rst
new file mode 100644
index 00000000..aae99136
--- /dev/null
+++ b/changelog/824.feature.rst
@@ -0,0 +1,1 @@
+use the os environment variable ``TOX_SKIP_ENV`` to filter out tox environment names from the run list (set by :confval:`envlist`)  - by :user:`gaborbernat`
diff --git a/changelog/838.feature.rst b/changelog/838.feature.rst
new file mode 100644
index 00000000..b90ff843
--- /dev/null
+++ b/changelog/838.feature.rst
@@ -0,0 +1,1 @@
+always set ``PIP_USER=0`` (do not install into the user site package, but inside the virtual environment created) and ``PIP_NO_DEPS=0`` (installing without dependencies can cause broken package installations) inside tox - by :user:`gaborbernat`
diff --git a/changelog/947.feature.rst b/changelog/947.feature.rst
new file mode 100644
index 00000000..7fff5e71
--- /dev/null
+++ b/changelog/947.feature.rst
@@ -0,0 +1,1 @@
+allow injecting config value inside the ini file dependent of the fact that we're connected to an interactive shell or not  - by :user:`gaborbernat`
diff --git a/doc/config.rst b/doc/config.rst
index 89ce7a3a..5f6ab273 100644
--- a/doc/config.rst
+++ b/doc/config.rst
@@ -76,6 +76,13 @@ and will first lookup global tox settings in this section:
     * environment variable ``TOXENV``
     * ``tox.ini`` file's ``envlist``
 
+    .. versionadded:: 3.4.0
+
+        What tox environments are ran during the tox invocation can be further filtered
+        via the operating system environment variable ``TOX_SKIP_ENV`` regular expression
+        (e.g. ``py27.*`` means **don't** evaluate environments that start with the key ``py27``).
+        Skipped environments will be logged at level two verbosity level.
+
 .. confval:: ignore_basepython_conflict=True|False(default)
 
     .. versionadded:: 3.1.0
@@ -557,6 +564,17 @@ the above example is roughly equivalent to
 .. _`command positional substitution`:
 .. _`positional substitution`:
 
+interactive shell substitution
+++++++++++++++++++++++++++++++
+
+It's possible to inject a config value only when tox is running in interactive shell (standard input):
+
+    {tty:ON_VALUE:OFF_VALUE}
+
+The first value is the value to inject when the interactive terminal is available,
+the second value is the value to use when it's not. The later on is optional. A good use case
+for this is e.g. passing in the ``--pdb`` flag for pytest.
+
 substitutions for positional arguments in commands
 ++++++++++++++++++++++++++++++++++++++++++++++++++
 
diff --git a/src/tox/config.py b/src/tox/config.py
index 99714e6d..16f2c606 100755
--- a/src/tox/config.py
+++ b/src/tox/config.py
@@ -1430,6 +1430,10 @@ class Replacer:
 
         if sub_type == "env":
             return self._replace_env(match)
+        if sub_type == "tty":
+            if is_interactive():
+                return match.group("substitution_value")
+            return match.group("default_value")
         if sub_type is not None:
             raise tox.exception.ConfigError(
                 "No support for the {} substitution type".format(sub_type)
@@ -1437,16 +1441,16 @@ class Replacer:
         return self._replace_substitution(match)
 
     def _replace_env(self, match):
-        envkey = match.group("substitution_value")
-        if not envkey:
+        key = match.group("substitution_value")
+        if not key:
             raise tox.exception.ConfigError("env: requires an environment variable name")
         default = match.group("default_value")
-        envvalue = self.reader.get_environ_value(envkey)
-        if envvalue is not None:
-            return envvalue
+        value = self.reader.get_environ_value(key)
+        if value is not None:
+            return value
         if default is not None:
             return default
-        raise tox.exception.MissingSubstitution(envkey)
+        raise tox.exception.MissingSubstitution(key)
 
     def _substitute_from_other_section(self, key):
         if key.startswith("[") and "]" in key:
@@ -1475,6 +1479,10 @@ class Replacer:
         return str(val)
 
 
+def is_interactive():
+    return sys.stdin.isatty()
+
+
 class _ArgvlistReader:
     @classmethod
     def getargvlist(cls, reader, value, replace=True):
diff --git a/src/tox/session.py b/src/tox/session.py
index 7da1efcd..dc25a277 100644
--- a/src/tox/session.py
+++ b/src/tox/session.py
@@ -381,7 +381,7 @@ class Session:
         self._spec2pkg = {}
         self._name2venv = {}
         try:
-            self.venvlist = [self.getvenv(x) for x in self.config.envlist]
+            self.venvlist = [self.getvenv(x) for x in self.evaluated_env_list()]
         except LookupError:
             raise SystemExit(1)
         except tox.exception.ConfigError as e:
@@ -389,6 +389,18 @@ class Session:
             raise SystemExit(1)
         self._actions = []
 
+    def evaluated_env_list(self):
+        tox_env_filter = os.environ.get("TOX_SKIP_ENV")
+        tox_env_filter_re = re.compile(tox_env_filter) if tox_env_filter is not None else None
+        for name in self.config.envlist:
+            if tox_env_filter_re is not None and tox_env_filter_re.match(name):
+                msg = "skip environment {}, matches filter {!r}".format(
+                    name, tox_env_filter_re.pattern
+                )
+                self.report.verbosity1(msg)
+                continue
+            yield name
+
     @property
     def hook(self):
         return self.config.pluginmanager.hook
diff --git a/src/tox/venv.py b/src/tox/venv.py
index a10149a9..0209f915 100755
--- a/src/tox/venv.py
+++ b/src/tox/venv.py
@@ -5,6 +5,7 @@ import pipes
 import re
 import sys
 import warnings
+from itertools import chain
 
 import py
 
@@ -231,7 +232,7 @@ class VirtualEnv(object):
         setup_py = setupdir.join("setup.py")
         setup_cfg = setupdir.join("setup.cfg")
         args = [self.envconfig.envpython, str(setup_py), "--name"]
-        env = self._getenv()
+        env = self._get_os_environ()
         output = action.popen(args, cwd=setupdir, redirect=False, returnout=True, env=env)
         name = output.strip()
         args = [self.envconfig.envpython, "-c", "import sys; print(sys.path)"]
@@ -297,30 +298,26 @@ class VirtualEnv(object):
         return options
 
     def run_install_command(self, packages, action, options=()):
-        argv = self.envconfig.install_command[:]
-        i = argv.index("{packages}")
-        argv[i : i + 1] = packages
-        if "{opts}" in argv:
-            i = argv.index("{opts}")
-            argv[i : i + 1] = list(options)
+        def expand(val):
+            # expand an install command
+            if val == "{packages}":
+                for package in packages:
+                    yield package
+            elif val == "{opts}":
+                for opt in options:
+                    yield opt
+            else:
+                yield val
 
-        for x in ("PIP_RESPECT_VIRTUALENV", "PIP_REQUIRE_VIRTUALENV", "__PYVENV_LAUNCHER__"):
-            os.environ.pop(x, None)
+        cmd = list(chain.from_iterable(expand(val) for val in self.envconfig.install_command))
 
-        if "PYTHONPATH" not in self.envconfig.passenv:
-            # If PYTHONPATH not explicitly asked for, remove it.
-            if "PYTHONPATH" in os.environ:
-                self.session.report.warning(
-                    "Discarding $PYTHONPATH from environment, to override "
-                    "specify PYTHONPATH in 'passenv' in your configuration."
-                )
-                os.environ.pop("PYTHONPATH")
+        self.ensure_pip_os_environ_ok()
 
         old_stdout = sys.stdout
         sys.stdout = codecs.getwriter("utf8")(sys.stdout)
         try:
             self._pcall(
-                argv,
+                cmd,
                 cwd=self.envconfig.config.toxinidir,
                 action=action,
                 redirect=self.session.report.verbosity < 2,
@@ -328,6 +325,24 @@ class VirtualEnv(object):
         finally:
             sys.stdout = old_stdout
 
+    def ensure_pip_os_environ_ok(self):
+        for key in ("PIP_RESPECT_VIRTUALENV", "PIP_REQUIRE_VIRTUALENV", "__PYVENV_LAUNCHER__"):
+            os.environ.pop(key, None)
+        if "PYTHONPATH" not in self.envconfig.passenv:
+            # If PYTHONPATH not explicitly asked for, remove it.
+            if "PYTHONPATH" in os.environ:
+                self.session.report.warning(
+                    "Discarding $PYTHONPATH from environment, to override "
+                    "specify PYTHONPATH in 'passenv' in your configuration."
+                )
+                os.environ.pop("PYTHONPATH")
+
+        # installing packages at user level may mean we're not installing inside the venv
+        os.environ["PIP_USER"] = "0"
+
+        # installing without dependencies may lead to broken packages
+        os.environ["PIP_NO_DEPS"] = "0"
+
     def _install(self, deps, extraopts=None, action=None):
         if not deps:
             return
@@ -353,13 +368,13 @@ class VirtualEnv(object):
                 options.extend(extraopts)
             self.run_install_command(packages=packages, options=options, action=action)
 
-    def _getenv(self, testcommand=False):
-        if testcommand:
+    def _get_os_environ(self, is_test_command=False):
+        if is_test_command:
             # for executing tests we construct a clean environment
             env = {}
-            for envname in self.envconfig.passenv:
-                if envname in os.environ:
-                    env[envname] = os.environ[envname]
+            for env_key in self.envconfig.passenv:
+                if env_key in os.environ:
+                    env[env_key] = os.environ[env_key]
         else:
             # for executing non-test commands we use the full
             # invocation environment
@@ -377,7 +392,7 @@ class VirtualEnv(object):
             self.session.make_emptydir(self.envconfig.envtmpdir)
             self.envconfig.envtmpdir.ensure(dir=1)
             cwd = self.envconfig.changedir
-            env = self._getenv(testcommand=True)
+            env = self._get_os_environ(is_test_command=True)
             # Display PYTHONHASHSEED to assist with reproducibility.
             action.setactivity("runtests", "PYTHONHASHSEED={!r}".format(env.get("PYTHONHASHSEED")))
             for i, argv in enumerate(self.envconfig.commands):
@@ -405,7 +420,7 @@ class VirtualEnv(object):
                         action=action,
                         redirect=redirect,
                         ignore_ret=ignore_ret,
-                        testcommand=True,
+                        is_test_command=True,
                     )
                 except tox.exception.InvocationError as err:
                     if self.envconfig.ignore_outcome:
@@ -424,18 +439,28 @@ class VirtualEnv(object):
                     raise
 
     def _pcall(
-        self, args, cwd, venv=True, testcommand=False, action=None, redirect=True, ignore_ret=False
+        self,
+        args,
+        cwd,
+        venv=True,
+        is_test_command=False,
+        action=None,
+        redirect=True,
+        ignore_ret=False,
     ):
+        # construct environment variables
         os.environ.pop("VIRTUALENV_PYTHON", None)
+        env = self._get_os_environ(is_test_command=is_test_command)
+        bin_dir = str(self.envconfig.envbindir)
+        env["PATH"] = os.pathsep.join([bin_dir, os.environ["PATH"]])
+        self.session.report.verbosity2("setting PATH={}".format(env["PATH"]))
 
-        cwd.ensure(dir=1)
+        # get command
         args[0] = self.getcommandpath(args[0], venv, cwd)
         if sys.platform != "win32" and "TOX_LIMITED_SHEBANG" in os.environ:
             args = prepend_shebang_interpreter(args)
-        env = self._getenv(testcommand=testcommand)
-        bindir = str(self.envconfig.envbindir)
-        env["PATH"] = p = os.pathsep.join([bindir, os.environ["PATH"]])
-        self.session.report.verbosity2("setting PATH={}".format(p))
+
+        cwd.ensure(dir=1)  # ensure the cwd exists
         return action.popen(args, cwd=cwd, env=env, redirect=redirect, ignore_ret=ignore_ret)
 
 

Tox should be able to detect interactive tty and alter some options based on this
It will be extremely useful if tox would allow users to detect an interactive tty and alter some execution options (like variables).

Example use case: adding `--pdb` to py.test arguments on interactive tty.

Any CI execution would run without an interactive TTY as this would be present only on developer terminal, a case where we may want to use an interactive debugger.

Now this is achievable using bash with something like
```
if [[ -t 1 ]]; then
  tox
else
  tox -- --pdb
fi
```
As you can see this is not only inconvenient but also creates more problems when you have multiple environments.

Reference: https://stackoverflow.com/questions/911168/how-to-detect-if-my-shell-script-is-running-through-a-pipe
diff --git a/tests/unit/session/test_session.py b/tests/unit/session/test_session.py
index 90b1b992..0e93f588 100644
--- a/tests/unit/session/test_session.py
+++ b/tests/unit/session/test_session.py
@@ -140,3 +140,73 @@ def test_skip_install_skip_package(cmd, initproj, mock_venv):
     )
     result = cmd("--notest")
     assert result.ret == 0
+
+
+@pytest.fixture()
+def venv_filter_project(initproj, cmd):
+    def func(*args):
+        initproj(
+            "pkg123-0.7",
+            filedefs={
+                "tox.ini": """
+                    [tox]
+                    envlist = {py27,py36}-{nocov,cov,diffcov}{,-extra}
+                    skipsdist = true
+
+                    [testenv]
+                    skip_install = true
+                    commands = python -c 'print("{envname}")'
+                """
+            },
+        )
+        result = cmd(*args)
+        assert result.ret == 0
+        active = [i.name for i in result.session.venvlist]
+        return active, result
+
+    yield func
+
+
+def test_venv_filter_empty_all_active(venv_filter_project, monkeypatch):
+    monkeypatch.delenv("TOX_SKIP_ENV", raising=False)
+    active, result = venv_filter_project("-a")
+    assert result.outlines == [
+        "py27-nocov",
+        "py27-nocov-extra",
+        "py27-cov",
+        "py27-cov-extra",
+        "py27-diffcov",
+        "py27-diffcov-extra",
+        "py36-nocov",
+        "py36-nocov-extra",
+        "py36-cov",
+        "py36-cov-extra",
+        "py36-diffcov",
+        "py36-diffcov-extra",
+    ]
+    assert active == result.outlines
+
+
+def test_venv_filter_match_all_none_active(venv_filter_project, monkeypatch):
+    monkeypatch.setenv("TOX_SKIP_ENV", ".*")
+    active, result = venv_filter_project("-a")
+    assert not active
+    existing_envs = result.outlines
+
+    _, result = venv_filter_project("-avv")
+    for name in existing_envs:
+        msg = "skip environment {}, matches filter '.*'".format(name)
+        assert msg in result.outlines
+
+
+def test_venv_filter_match_some_some_active(venv_filter_project, monkeypatch):
+    monkeypatch.setenv("TOX_SKIP_ENV", "py27.*")
+    active, result = venv_filter_project("-avvv")
+    assert active == [
+        "py36-nocov",
+        "py36-nocov-extra",
+        "py36-cov",
+        "py36-cov-extra",
+        "py36-diffcov",
+        "py36-diffcov-extra",
+    ]
diff --git a/tests/unit/test_config.py b/tests/unit/test_config.py
index 78afe57e..3943b032 100644
--- a/tests/unit/test_config.py
+++ b/tests/unit/test_config.py
@@ -2724,3 +2724,29 @@ def test_config_bad_config_type_specified(monkeypatch, tmpdir, capsys):
     msg = "\n".join(notes) + "\n"
     assert err == msg
     assert "ERROR:" not in out
+
+
+def test_interactive_na(newconfig, monkeypatch):
+    monkeypatch.setattr(tox.config, "is_interactive", lambda: False)
+    config = newconfig(
+        """
+        [testenv:py]
+        setenv = A = {tty:X:Y}
+        """
+    )
+    assert config.envconfigs["py"].setenv["A"] == "Y"
+
+
+def test_interactive_available(newconfig, monkeypatch):
+    monkeypatch.setattr(tox.config, "is_interactive", lambda: True)
+    config = newconfig(
+        """
+        [testenv:py]
+        setenv = A = {tty:X:Y}
+        """
+    )
+    assert config.envconfigs["py"].setenv["A"] == "X"
+
+
+def test_interactive():
+    tox.config.is_interactive()
diff --git a/tests/unit/test_venv.py b/tests/unit/test_venv.py
index 54a52511..5b830956 100644
--- a/tests/unit/test_venv.py
+++ b/tests/unit/test_venv.py
@@ -625,6 +625,8 @@ class TestVenvTest:
         assert "PIP_RESPECT_VIRTUALENV" not in os.environ
         assert "PIP_REQUIRE_VIRTUALENV" not in os.environ
         assert "__PYVENV_LAUNCHER__" not in os.environ
+        assert os.environ["PIP_USER"] == "0"
+        assert os.environ["PIP_NO_DEPS"] == "0"
 
     def test_pythonpath_usage(self, newmocksession, monkeypatch):
         monkeypatch.setenv("PYTHONPATH", "/my/awesome/library")

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest pytest-cov pytest-mock pytest-timeout pytest-xdist pytest-randomly
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
certifi==2021.5.30
coverage==6.2
distlib==0.3.9
execnet==1.9.0
filelock==3.4.1
importlib-metadata==4.8.3
importlib-resources==5.4.0
iniconfig==1.1.1
packaging==21.3
platformdirs==2.4.0
pluggy==0.13.1
py==1.11.0
pyparsing==3.1.4
pytest==7.0.1
pytest-cov==4.0.0
pytest-mock==3.6.1
pytest-randomly==3.10.3
pytest-timeout==2.1.0
pytest-xdist==3.0.2
six==1.17.0
toml==0.10.2
tomli==1.2.3
-e git+https://github.com/tox-dev/tox.git@3b91d63c9c5a089ba8ae9cbaec20bdf52ecf25cf#egg=tox
typing_extensions==4.1.1
virtualenv==20.17.1
zipp==3.6.0

name: tox
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - coverage==6.2
      - distlib==0.3.9
      - execnet==1.9.0
      - filelock==3.4.1
      - importlib-metadata==4.8.3
      - importlib-resources==5.4.0
      - iniconfig==1.1.1
      - packaging==21.3
      - platformdirs==2.4.0
      - pluggy==0.13.1
      - py==1.11.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - pytest-cov==4.0.0
      - pytest-mock==3.6.1
      - pytest-randomly==3.10.3
      - pytest-timeout==2.1.0
      - pytest-xdist==3.0.2
      - six==1.17.0
      - toml==0.10.2
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - virtualenv==20.17.1
      - zipp==3.6.0
prefix: /opt/conda/envs/tox

tests/unit/session/test_session.py::test_venv_filter_match_all_none_active tests/unit/session/test_session.py::test_venv_filter_match_some_some_active tests/unit/test_config.py::test_interactive_available tests/unit/test_config.py::test_interactive_na tests/unit/test_config.py::test_interactive
tests/unit/test_venv.py::TestCreationConfig::test_python_recreation tests/unit/test_venv.py::test_develop_extras tests/unit/test_venv.py::test_install_python3 tests/unit/test_venv.py::test_install_recreate tests/unit/test_venv.py::test_install_sdist_extras tests/unit/test_venv.py::test_install_deps_pre tests/unit/test_venv.py::test_create tests/unit/test_venv.py::test_installpkg_indexserver tests/unit/test_venv.py::test_install_deps_indexserver tests/unit/test_venv.py::test_install_deps_wildcard tests/unit/test_venv.py::test_install_command_verbosity[3-1] tests/unit/test_venv.py::test_install_command_verbosity[2-0] tests/unit/test_venv.py::test_installpkg_no_upgrade tests/unit/test_venv.py::test_run_install_command tests/unit/test_venv.py::test_env_variables_added_to_pcall tests/unit/test_venv.py::test_install_command_verbosity[1-0] tests/unit/test_venv.py::test_install_command_verbosity[6-3] tests/unit/test_venv.py::test_installpkg_upgrade tests/unit/test_venv.py::test_install_command_verbosity[0-0] tests/unit/test_venv.py::test_run_custom_install_command tests/unit/test_venv.py::test_install_command_verbosity[4-2] tests/unit/test_venv.py::test_install_command_verbosity[5-3] tests/unit/test_venv.py::TestVenvTest::test_envbindir_path tests/unit/test_venv.py::TestVenvTest::test_pythonpath_usage tests/unit/test_config.py::TestVenvConfig::test_force_dep_with_url
tests/unit/test_venv.py::TestCreationConfig::test_develop_recreation tests/unit/test_venv.py::TestCreationConfig::test_matchingdependencies_latest tests/unit/test_venv.py::TestCreationConfig::test_matchingdependencies tests/unit/test_venv.py::TestCreationConfig::test_basic tests/unit/test_venv.py::TestCreationConfig::test_dep_recreation tests/unit/test_venv.py::TestCreationConfig::test_matchingdependencies_file tests/unit/test_venv.py::test_commandpath_venv_precedence tests/unit/test_venv.py::test_env_variables_added_to_needs_reinstall tests/unit/test_venv.py::test_install_command_whitelisted tests/unit/test_venv.py::test_test_hashseed_is_in_output tests/unit/test_venv.py::test_install_command_not_installed_bash tests/unit/test_venv.py::test_test_runtests_action_command_is_in_output tests/unit/test_venv.py::test_getsupportedinterpreter tests/unit/test_venv.py::test_install_command_not_installed tests/unit/test_venv.py::test_getdigest tests/unit/test_venv.py::test_create_sitepackages tests/unit/test_venv.py::test_install_error tests/unit/test_venv.py::test_command_relative_issue36 tests/unit/test_venv.py::test_tox_testenv_pre_post tests/unit/test_venv.py::test_tox_testenv_create tests/unit/test_venv.py::test_tox_testenv_interpret_shebang_interpreter_args tests/unit/test_venv.py::test_tox_testenv_interpret_shebang_empty_interpreter_ws tests/unit/test_venv.py::test_tox_testenv_interpret_shebang_interpreter_ws tests/unit/test_venv.py::test_tox_testenv_interpret_shebang_empty_instance tests/unit/test_venv.py::test_tox_testenv_interpret_shebang_interpreter_arg tests/unit/test_venv.py::test_tox_testenv_interpret_shebang_real tests/unit/test_venv.py::test_tox_testenv_interpret_shebang_non_utf8 tests/unit/test_venv.py::test_tox_testenv_interpret_shebang_interpreter_simple tests/unit/test_venv.py::test_ignore_outcome_failing_cmd tests/unit/test_venv.py::test_tox_testenv_interpret_shebang_long_example tests/unit/test_venv.py::test_tox_testenv_interpret_shebang_empty_interpreter tests/unit/session/test_session.py::test_tox_parallel_build_safe tests/unit/session/test_session.py::test_skip_sdist tests/unit/session/test_session.py::test__resolve_pkg_missing_directory tests/unit/session/test_session.py::test__resolve_pkg_with_alpha_version tests/unit/session/test_session.py::test__resolve_pkg_with_invalid_version tests/unit/session/test_session.py::test_skip_install_skip_package tests/unit/session/test_session.py::test__resolve_pkg_doubledash tests/unit/session/test_session.py::test__resolve_pkg_missing_directory_in_distshare tests/unit/session/test_session.py::test_minversion tests/unit/session/test_session.py::test_venv_filter_empty_all_active tests/unit/session/test_session.py::test__resolve_pkg_multiple_valid_versions tests/unit/test_config.py::TestIndexServer::test_multiple_homedir_relative_local_indexservers tests/unit/test_config.py::TestIndexServer::test_indexserver tests/unit/test_config.py::TestIndexServer::test_parse_indexserver tests/unit/test_config.py::TestIniParserPrefix::test_value_matches_prefixed_section_substitution tests/unit/test_config.py::TestIniParserPrefix::test_fallback_sections tests/unit/test_config.py::TestIniParserPrefix::test_value_doesn_match_prefixed_section_substitution tests/unit/test_config.py::TestIniParserPrefix::test_basic_section_access tests/unit/test_config.py::TestIniParserPrefix::test_other_section_substitution tests/unit/test_config.py::TestConfigTestEnv::test_factor_use_not_checked tests/unit/test_config.py::TestConfigTestEnv::test_envbindir_jython[jython] tests/unit/test_config.py::TestConfigTestEnv::test_take_dependencies_from_other_section tests/unit/test_config.py::TestConfigTestEnv::test_posargs_backslashed_or_quoted tests/unit/test_config.py::TestConfigTestEnv::test_pip_pre tests/unit/test_config.py::TestConfigTestEnv::test_sitepackages_switch tests/unit/test_config.py::TestConfigTestEnv::test_default_factors tests/unit/test_config.py::TestConfigTestEnv::test_pip_pre_cmdline_override tests/unit/test_config.py::TestConfigTestEnv::test_passenv_glob_from_global_env tests/unit/test_config.py::TestConfigTestEnv::test_passenv_as_space_separated_list[linux2] tests/unit/test_config.py::TestConfigTestEnv::test_single_value_from_other_secton tests/unit/test_config.py::TestConfigTestEnv::test_factors tests/unit/test_config.py::TestConfigTestEnv::test_passenv_as_space_separated_list[win32] tests/unit/test_config.py::TestConfigTestEnv::test_factors_groups_touch tests/unit/test_config.py::TestConfigTestEnv::test_envconfigs_based_on_factors tests/unit/test_config.py::TestConfigTestEnv::test_specific_command_overrides tests/unit/test_config.py::TestConfigTestEnv::test_substitution_double tests/unit/test_config.py::TestConfigTestEnv::test_envbindir_jython[pypy3] tests/unit/test_config.py::TestConfigTestEnv::test_envbindir tests/unit/test_config.py::TestConfigTestEnv::test_substitution_defaults tests/unit/test_config.py::TestConfigTestEnv::test_simple tests/unit/test_config.py::TestConfigTestEnv::test_install_command_setting tests/unit/test_config.py::TestConfigTestEnv::test_passenv_with_factor tests/unit/test_config.py::TestConfigTestEnv::test_default_factors_conflict_ignore tests/unit/test_config.py::TestConfigTestEnv::test_installpkg_tops_develop tests/unit/test_config.py::TestConfigTestEnv::test_install_command_must_contain_packages tests/unit/test_config.py::TestConfigTestEnv::test_take_dependencies_from_other_testenv[envlist0-deps0] tests/unit/test_config.py::TestConfigTestEnv::test_passenv_as_multiline_list[linux2] tests/unit/test_config.py::TestConfigTestEnv::test_substitution_error tests/unit/test_config.py::TestConfigTestEnv::test_changedir_override tests/unit/test_config.py::TestConfigTestEnv::test_substitution_noargs_issue240 tests/unit/test_config.py::TestConfigTestEnv::test_rewrite_simple_posargs tests/unit/test_config.py::TestConfigTestEnv::test_passenv_from_global_env tests/unit/test_config.py::TestConfigTestEnv::test_ignore_errors tests/unit/test_config.py::TestConfigTestEnv::test_envbindir_jython[pypy] tests/unit/test_config.py::TestConfigTestEnv::test_ignore_outcome tests/unit/test_config.py::TestConfigTestEnv::test_passenv_as_multiline_list[win32] tests/unit/test_config.py::TestConfigTestEnv::test_substitution_nested_env_defaults tests/unit/test_config.py::TestConfigTestEnv::test_substitution_positional tests/unit/test_config.py::TestConfigTestEnv::test_multilevel_substitution tests/unit/test_config.py::TestConfigTestEnv::test_substitution_notfound_issue246 tests/unit/test_config.py::TestConfigTestEnv::test_changedir tests/unit/test_config.py::TestConfigTestEnv::test_default_factors_conflict tests/unit/test_config.py::TestConfigTestEnv::test_period_in_factor tests/unit/test_config.py::TestConfigTestEnv::test_install_command_substitutions tests/unit/test_config.py::TestConfigTestEnv::test_recursive_substitution_cycle_fails tests/unit/test_config.py::TestConfigTestEnv::test_substitution_notfound_issue515 tests/unit/test_config.py::TestConfigTestEnv::test_whitelist_externals tests/unit/test_config.py::TestConfigTestEnv::test_factors_in_boolean tests/unit/test_config.py::TestConfigTestEnv::test_defaults tests/unit/test_config.py::TestConfigTestEnv::test_default_factors_conflict_lying_name tests/unit/test_config.py::TestConfigTestEnv::test_factor_ops tests/unit/test_config.py::TestConfigTestEnv::test_take_dependencies_from_other_testenv[envlist1-deps1] tests/unit/test_config.py::TestConfigTestEnv::test_commentchars_issue33 tests/unit/test_config.py::TestConfigTestEnv::test_factors_in_setenv tests/unit/test_config.py::TestConfigTestEnv::test_rewrite_posargs tests/unit/test_config.py::TestSetenv::test_getdict_lazy tests/unit/test_config.py::TestSetenv::test_setenv_recursive_direct tests/unit/test_config.py::TestSetenv::test_setenv_overrides tests/unit/test_config.py::TestSetenv::test_setenv_cross_section_subst_twice tests/unit/test_config.py::TestSetenv::test_setenv_with_envdir_and_basepython tests/unit/test_config.py::TestSetenv::test_setenv_default_os_environ tests/unit/test_config.py::TestSetenv::test_setenv_ordering_1 tests/unit/test_config.py::TestSetenv::test_getdict_lazy_update tests/unit/test_config.py::TestSetenv::test_setenv_cross_section_subst_issue294 tests/unit/test_config.py::TestSetenv::test_setenv_uses_other_setenv tests/unit/test_config.py::TestSetenv::test_setenv_cross_section_mixed tests/unit/test_config.py::TestSetenv::test_setenv_uses_os_environ tests/unit/test_config.py::TestGetcontextname::test_blank tests/unit/test_config.py::TestGetcontextname::test_hudson_legacy tests/unit/test_config.py::TestGetcontextname::test_jenkins tests/unit/test_config.py::TestParseEnv::test_parse_recreate tests/unit/test_config.py::TestConfigPackage::test_defaults_distshare tests/unit/test_config.py::TestConfigPackage::test_project_paths tests/unit/test_config.py::TestConfigPackage::test_defaults_changed_dir tests/unit/test_config.py::TestConfigPackage::test_defaults tests/unit/test_config.py::test_get_homedir tests/unit/test_config.py::test_env_spec[-e tests/unit/test_config.py::test_config_via_pyproject_legacy tests/unit/test_config.py::test_config_bad_config_type_specified tests/unit/test_config.py::test_plugin_require tests/unit/test_config.py::test_config_bad_pyproject_specified tests/unit/test_config.py::test_isolated_build_env_cannot_be_in_envlist tests/unit/test_config.py::TestParseconfig::test_explicit_config_path tests/unit/test_config.py::TestParseconfig::test_search_parents tests/unit/test_config.py::TestConfigConstSubstitutions::test_pathsep_regex tests/unit/test_config.py::TestConfigConstSubstitutions::test_replace_pathsep_unix[;] tests/unit/test_config.py::TestConfigConstSubstitutions::test_replace_pathsep_unix[:] tests/unit/test_config.py::TestIniParser::test_argvlist_windows_escaping tests/unit/test_config.py::TestIniParser::test_argvlist_quoting_in_command tests/unit/test_config.py::TestIniParser::test_getstring_environment_substitution_with_default tests/unit/test_config.py::TestIniParser::test_argvlist tests/unit/test_config.py::TestIniParser::test_argvlist_quoted_posargs tests/unit/test_config.py::TestIniParser::test_getbool tests/unit/test_config.py::TestIniParser::test_normal_env_sub_works tests/unit/test_config.py::TestIniParser::test_substitution_with_multiple_words tests/unit/test_config.py::TestIniParser::test_getstring_fallback_sections tests/unit/test_config.py::TestIniParser::test_getdict tests/unit/test_config.py::TestIniParser::test_posargs_are_added_escaped_issue310 tests/unit/test_config.py::TestIniParser::test_value_doesn_match_section_substitution tests/unit/test_config.py::TestIniParser::test_positional_arguments_are_only_replaced_when_standing_alone tests/unit/test_config.py::TestIniParser::test_argvlist_comment_after_command tests/unit/test_config.py::TestIniParser::test_getargv tests/unit/test_config.py::TestIniParser::test_getpath tests/unit/test_config.py::TestIniParser::test_value_matches_section_substitution tests/unit/test_config.py::TestIniParser::test_argvlist_positional_substitution tests/unit/test_config.py::TestIniParser::test_getstring_other_section_substitution tests/unit/test_config.py::TestIniParser::test_missing_env_sub_populates_missing_subs tests/unit/test_config.py::TestIniParser::test_argvlist_command_contains_hash tests/unit/test_config.py::TestIniParser::test_argvlist_multiline tests/unit/test_config.py::TestIniParser::test_getstring_single tests/unit/test_config.py::TestIniParser::test_missing_env_sub_raises_config_error_in_non_testenv tests/unit/test_config.py::TestIniParser::test_getlist tests/unit/test_config.py::TestIniParser::test_missing_substitution tests/unit/test_config.py::TestIniParser::test_argvlist_posargs_with_quotes tests/unit/test_config.py::TestIniParser::test_getstring_substitution tests/unit/test_config.py::TestGlobalOptions::test_verbosity tests/unit/test_config.py::TestGlobalOptions::test_envlist_expansion tests/unit/test_config.py::TestGlobalOptions::test_skip_missing_interpreters_cli_no_arg tests/unit/test_config.py::TestGlobalOptions::test_notest tests/unit/test_config.py::TestGlobalOptions::test_defaultenv_commandline tests/unit/test_config.py::TestGlobalOptions::test_skip_missing_interpreters_cli_overrides_false tests/unit/test_config.py::TestGlobalOptions::test_skip_missing_interpreters_cli_not_specified tests/unit/test_config.py::TestGlobalOptions::test_envlist_cross_product tests/unit/test_config.py::TestGlobalOptions::test_skip_missing_interpreters_false tests/unit/test_config.py::TestGlobalOptions::test_quiet[args1-1] tests/unit/test_config.py::TestGlobalOptions::test_env_selection tests/unit/test_config.py::TestGlobalOptions::test_minversion tests/unit/test_config.py::TestGlobalOptions::test_defaultenv_partial_override tests/unit/test_config.py::TestGlobalOptions::test_quiet[args0-0] tests/unit/test_config.py::TestGlobalOptions::test_envlist_multiline tests/unit/test_config.py::TestGlobalOptions::test_substitution_jenkins_context tests/unit/test_config.py::TestGlobalOptions::test_py_venv tests/unit/test_config.py::TestGlobalOptions::test_quiet[args2-2] tests/unit/test_config.py::TestGlobalOptions::test_skip_missing_interpreters_cli_overrides_true tests/unit/test_config.py::TestGlobalOptions::test_correct_basepython_chosen_from_default_factors tests/unit/test_config.py::TestGlobalOptions::test_sdist_specification tests/unit/test_config.py::TestGlobalOptions::test_quiet[args3-3] tests/unit/test_config.py::TestGlobalOptions::test_substitution_jenkins_default tests/unit/test_config.py::TestGlobalOptions::test_skip_missing_interpreters_true tests/unit/test_config.py::TestVenvConfig::test_process_deps tests/unit/test_config.py::TestVenvConfig::test_config_parsing_minimal tests/unit/test_config.py::TestVenvConfig::test_envdir_set_manually_with_substitutions tests/unit/test_config.py::TestVenvConfig::test_is_same_dep tests/unit/test_config.py::TestVenvConfig::test_envdir_set_manually tests/unit/test_config.py::TestVenvConfig::test_force_dep_version tests/unit/test_config.py::TestVenvConfig::test_config_parsing_multienv tests/unit/test_config.py::TestIniParserAgainstCommandsKey::test_command_substitution_from_other_section_posargs tests/unit/test_config.py::TestIniParserAgainstCommandsKey::test_command_substitution_from_other_section_multiline tests/unit/test_config.py::TestIniParserAgainstCommandsKey::test_command_substitution_from_other_section tests/unit/test_config.py::TestIniParserAgainstCommandsKey::test_command_env_substitution_global tests/unit/test_config.py::TestIniParserAgainstCommandsKey::test_command_env_substitution tests/unit/test_config.py::TestIniParserAgainstCommandsKey::test_regression_issue595 tests/unit/test_config.py::TestIniParserAgainstCommandsKey::test_command_section_and_posargs_substitution tests/unit/test_config.py::TestCommandParser::test_command_parser_for_posargs tests/unit/test_config.py::TestCommandParser::test_command_parser_for_word tests/unit/test_config.py::TestCommandParser::test_command_parser_with_complex_word_set tests/unit/test_config.py::TestCommandParser::test_command_with_runs_of_whitespace tests/unit/test_config.py::TestCommandParser::test_commands_with_backslash tests/unit/test_config.py::TestCommandParser::test_command_parser_for_multiple_words tests/unit/test_config.py::TestCommandParser::test_command_with_split_line_in_subst_arguments tests/unit/test_config.py::TestCommandParser::test_command_parsing_for_issue_10 tests/unit/test_config.py::TestCommandParser::test_command_parser_for_substitution_with_spaces tests/unit/test_config.py::TestHashseedOption::test_setenv tests/unit/test_config.py::TestHashseedOption::test_passing_integer tests/unit/test_config.py::TestHashseedOption::test_one_random_hashseed tests/unit/test_config.py::TestHashseedOption::test_setenv_in_one_testenv tests/unit/test_config.py::TestHashseedOption::test_noset_with_setenv tests/unit/test_config.py::TestHashseedOption::test_passing_no_argument tests/unit/test_config.py::TestHashseedOption::test_passing_string tests/unit/test_config.py::TestHashseedOption::test_passing_empty_string tests/unit/test_config.py::TestHashseedOption::test_noset tests/unit/test_config.py::TestHashseedOption::test_default tests/unit/test_config.py::TestConfigPlatform::test_config_parse_platform_with_factors[win] tests/unit/test_config.py::TestConfigPlatform::test_config_parse_platform_with_factors[osx] tests/unit/test_config.py::TestConfigPlatform::test_config_parse_platform_with_factors[lin] tests/unit/test_config.py::TestConfigPlatform::test_config_parse_platform_rex tests/unit/test_config.py::TestConfigPlatform::test_config_parse_platform tests/unit/test_config.py::TestCmdInvocation::test_version_no_plugins tests/unit/test_config.py::TestCmdInvocation::test_help tests/unit/test_config.py::TestCmdInvocation::test_version_with_normal_plugin tests/unit/test_config.py::TestCmdInvocation::test_override_workdir tests/unit/test_config.py::TestCmdInvocation::test_version_with_fileless_module tests/unit/test_config.py::TestCmdInvocation::test_version_simple tests/unit/test_config.py::TestCmdInvocation::test_showconfig_with_force_dep_version tests/unit/test_config.py::TestCmdInvocation::test_config_specific_ini tests/unit/test_config.py::TestCmdInvocation::test_no_tox_ini
doc/config.rst changelog/838.feature.rst src/tox/venv.py src/tox/session.py changelog/947.feature.rst changelog/824.feature.rst src/tox/config.py
doc/config.rst changelog/838.feature.rst src/tox/venv.py src/tox/session.py changelog/947.feature.rst changelog/824.feature.rst src/tox/config.py