diff --git a/docs/html/reference/pip_install.rst b/docs/html/reference/pip_install.rst
index cc38f0bd7..f0a5e075c 100644
--- a/docs/html/reference/pip_install.rst
+++ b/docs/html/reference/pip_install.rst
@@ -153,6 +153,7 @@ The following options are supported:
   *  :ref:`--no-binary <install_--no-binary>`
   *  :ref:`--only-binary <install_--only-binary>`
   *  :ref:`--require-hashes <--require-hashes>`
+  *  :ref:`--trusted-host <--trusted-host>`
 
 For example, to specify :ref:`--no-index <--no-index>` and two
 :ref:`--find-links <--find-links>` locations:
diff --git a/news/3799.feature b/news/3799.feature
new file mode 100644
index 000000000..e15c2a1da
--- /dev/null
+++ b/news/3799.feature
@@ -0,0 +1,1 @@
+Fully support using ``--trusted-host`` inside requirements files.
diff --git a/src/pip/_internal/download.py b/src/pip/_internal/download.py
index 6a54f8940..0aa692b15 100644
--- a/src/pip/_internal/download.py
+++ b/src/pip/_internal/download.py
@@ -588,6 +588,8 @@ class PipSession(requests.Session):
         # well as any https:// host that we've marked as ignoring TLS errors
         # for.
         insecure_adapter = InsecureHTTPAdapter(max_retries=retries)
+        # Save this for later use in add_insecure_host().
+        self._insecure_adapter = insecure_adapter
 
         self.mount("https://", secure_adapter)
         self.mount("http://", insecure_adapter)
@@ -598,7 +600,11 @@ class PipSession(requests.Session):
         # We want to use a non-validating adapter for any requests which are
         # deemed insecure.
         for host in insecure_hosts:
-            self.mount("https://{}/".format(host), insecure_adapter)
+            self.add_insecure_host(host)
+
+    def add_insecure_host(self, host):
+        # type: (str) -> None
+        self.mount('https://{}/'.format(host), self._insecure_adapter)
 
     def request(self, method, url, *args, **kwargs):
         # Allow setting a default timeout on a session
diff --git a/src/pip/_internal/index.py b/src/pip/_internal/index.py
index c2a2415a2..1c8f1ecb1 100644
--- a/src/pip/_internal/index.py
+++ b/src/pip/_internal/index.py
@@ -608,8 +608,8 @@ class PackageFinder(object):
         # type: (...) -> PackageFinder
         """Create a PackageFinder.
 
-        :param trusted_hosts: Domains that we won't emit warnings for when
-            not using HTTPS.
+        :param trusted_hosts: Domains not to emit warnings for when not using
+            HTTPS.
         :param session: The Session to use to make requests.
         :param format_control: A FormatControl object or None. Used to control
             the selection of source packages / binary packages when consulting
@@ -676,12 +676,23 @@ class PackageFinder(object):
         # type: () -> None
         self.candidate_evaluator.allow_all_prereleases = True
 
-    def extend_trusted_hosts(self, hosts):
-        # type: (List[str]) -> None
-        for host in hosts:
-            if host in self.trusted_hosts:
-                continue
-            self.trusted_hosts.append(host)
+    def add_trusted_host(self, host, source=None):
+        # type: (str, Optional[str]) -> None
+        """
+        :param source: An optional source string, for logging where the host
+            string came from.
+        """
+        # It is okay to add a previously added host because PipSession stores
+        # the resulting prefixes in a dict.
+        msg = 'adding trusted host: {!r}'.format(host)
+        if source is not None:
+            msg += ' (from {})'.format(source)
+        logger.info(msg)
+        self.session.add_insecure_host(host)
+        if host in self.trusted_hosts:
+            return
+
+        self.trusted_hosts.append(host)
 
     def iter_secure_origins(self):
         # type: () -> Iterator[SecureOrigin]
diff --git a/src/pip/_internal/req/req_file.py b/src/pip/_internal/req/req_file.py
index c066b406d..ee62171da 100644
--- a/src/pip/_internal/req/req_file.py
+++ b/src/pip/_internal/req/req_file.py
@@ -250,8 +250,9 @@ def process_line(
             finder.find_links.append(value)
         if opts.pre:
             finder.set_allow_all_prereleases()
-        if opts.trusted_hosts:
-            finder.extend_trusted_hosts(opts.trusted_hosts)
+        for host in opts.trusted_hosts or []:
+            source = 'line {} of {}'.format(line_number, filename)
+            finder.add_trusted_host(host, source=source)
 
 
 def break_args_options(line):

--trusted-host in requirements.txt is ignored
According to the release notes and the old issue #2822, trusted-host should work in a requirements.txt file, but it has no effect. I can't find it documented but since it doesn't generate a warning, I assume it's still supported.
- Pip version: 8.1.2
- Python version: 2.7.5
- Operating System: CentOS 7.2.1511

This is the requirements.txt file:

```
--trusted-host doubly.so
--index-url https://doubly.so/pub/py/simple
dummy_test
```

It does not work unless I give the trusted-host option on the command-line:

``` bash
[14:06:19] pip install -r requirements.txt 
DEPRECATION: --allow-all-external has been deprecated and will be removed in the future. Due to changes in the repository protocol, it no longer has any effect.
Collecting dummy_test (from -r requirements.txt (line 3))
  Could not fetch URL https://doubly.so/pub/py/simple/dummy-test/: There was a problem confirming the ssl certificate: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:765) - skipping
  Could not find a version that satisfies the requirement dummy_test (from -r requirements.txt (line 3)) (from versions: )
No matching distribution found for dummy_test (from -r requirements.txt (line 3))

[1][14:06:21] pip install --trusted-host doubly.so -r requirements.txt 
DEPRECATION: --allow-all-external has been deprecated and will be removed in the future. Due to changes in the repository protocol, it no longer has any effect.
Collecting dummy_test (from -r requirements.txt (line 3))
Installing collected packages: dummy-test
Successfully installed dummy-test-0.1.3
```

diff --git a/tests/unit/test_index.py b/tests/unit/test_index.py
index c7dc1715a..4ffc6475e 100644
--- a/tests/unit/test_index.py
+++ b/tests/unit/test_index.py
@@ -163,16 +163,61 @@ class TestPackageFinder:
         assert actual_target_python is target_python
         assert actual_target_python.py_version_info == (3, 7, 3)
 
-    def test_extend_trusted_hosts(self):
-        trusted_hosts = ['host1', 'host2']
-        finder = make_test_finder(trusted_hosts=trusted_hosts)
-
-        # Check that extend_trusted_hosts() prevents duplicates.
-        finder.extend_trusted_hosts(['host2', 'host3', 'host2'])
-        assert finder.trusted_hosts == ['host1', 'host2', 'host3'], (
+    def test_add_trusted_host(self):
+        # Leave a gap to test how the ordering is affected.
+        trusted_hosts = ['host1', 'host3']
+        session = PipSession(insecure_hosts=trusted_hosts)
+        finder = make_test_finder(
+            session=session,
+            trusted_hosts=trusted_hosts,
+        )
+        insecure_adapter = session._insecure_adapter
+        prefix2 = 'https://host2/'
+        prefix3 = 'https://host3/'
+
+        # Confirm some initial conditions as a baseline.
+        assert finder.trusted_hosts == ['host1', 'host3']
+        assert session.adapters[prefix3] is insecure_adapter
+        assert prefix2 not in session.adapters
+
+        # Test adding a new host.
+        finder.add_trusted_host('host2')
+        assert finder.trusted_hosts == ['host1', 'host3', 'host2']
+        # Check that prefix3 is still present.
+        assert session.adapters[prefix3] is insecure_adapter
+        assert session.adapters[prefix2] is insecure_adapter
+
+        # Test that adding the same host doesn't create a duplicate.
+        finder.add_trusted_host('host3')
+        assert finder.trusted_hosts == ['host1', 'host3', 'host2'], (
             'actual: {}'.format(finder.trusted_hosts)
         )
 
+    def test_add_trusted_host__logging(self, caplog):
+        """
+        Test logging when add_trusted_host() is called.
+        """
+        trusted_hosts = ['host1']
+        session = PipSession(insecure_hosts=trusted_hosts)
+        finder = make_test_finder(
+            session=session,
+            trusted_hosts=trusted_hosts,
+        )
+        with caplog.at_level(logging.INFO):
+            # Test adding an existing host.
+            finder.add_trusted_host('host1', source='somewhere')
+            finder.add_trusted_host('host2')
+            # Test calling add_trusted_host() on the same host twice.
+            finder.add_trusted_host('host2')
+
+        actual = [(r.levelname, r.message) for r in caplog.records]
+        expected = [
+            ('INFO', "adding trusted host: 'host1' (from somewhere)"),
+            ('INFO', "adding trusted host: 'host2'"),
+            ('INFO', "adding trusted host: 'host2'"),
+        ]
+        assert actual == expected
+
     def test_iter_secure_origins(self):
         trusted_hosts = ['host1', 'host2']
         finder = make_test_finder(trusted_hosts=trusted_hosts)
diff --git a/tests/unit/test_req_file.py b/tests/unit/test_req_file.py
index 1c73d4f23..972d84684 100644
--- a/tests/unit/test_req_file.py
+++ b/tests/unit/test_req_file.py
@@ -1,3 +1,4 @@
+import logging
 import os
 import subprocess
 import textwrap
@@ -314,9 +315,21 @@ class TestProcessLine(object):
         list(process_line("--extra-index-url=url", "file", 1, finder=finder))
         assert finder.index_urls == ['url']
 
-    def test_set_finder_trusted_host(self, finder):
-        list(process_line("--trusted-host=url", "file", 1, finder=finder))
-        assert finder.trusted_hosts == ['url']
+    def test_set_finder_trusted_host(self, caplog, finder):
+        with caplog.at_level(logging.INFO):
+            list(process_line(
+                "--trusted-host=host", "file.txt", 1, finder=finder,
+            ))
+        assert finder.trusted_hosts == ['host']
+        session = finder.session
+        assert session.adapters['https://host/'] is session._insecure_adapter
+
+        # Test the log message.
+        actual = [(r.levelname, r.message) for r in caplog.records]
+        expected = [
+            ('INFO', "adding trusted host: 'host' (from line 1 of file.txt)"),
+        ]
+        assert actual == expected
 
     def test_noop_always_unzip(self, finder):
         # noop, but confirm it can be set

pip install -e .
parse_log_pytest
pytest
pytest pytest-cov pytest-rerunfailures pytest-timeout pytest-xdist freezegun mock pretend pyyaml setuptools>=39.2.0 scripttest virtualenv wheel
3.9
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
coverage==7.8.0
distlib==0.3.9
exceptiongroup==1.2.0
execnet==2.1.1
filelock==3.18.0
freezegun==1.5.1
iniconfig==1.1.1
mock==5.2.0
packaging==24.2
platformdirs==4.3.7
pluggy==1.5.0
pretend==1.0.9
pytest==8.3.4
pytest-cov==6.0.0
pytest-rerunfailures==15.0
pytest-timeout==2.3.1
pytest-xdist==3.6.1
python-dateutil==2.9.0.post0
PyYAML==6.0.2
scripttest==2.0
six==1.17.0
tomli==2.0.1
virtualenv==20.29.3

name: pip
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
  - exceptiongroup=1.2.0=py39h06a4308_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - 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=3.0.16=h5eee18b_0
  - packaging=24.2=py39h06a4308_0
  - pluggy=1.5.0=py39h06a4308_0
  - pytest=8.3.4=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py39h06a4308_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - coverage==7.8.0
      - distlib==0.3.9
      - execnet==2.1.1
      - filelock==3.18.0
      - freezegun==1.5.1
      - mock==5.2.0
      - pip==19.1.1
      - platformdirs==4.3.7
      - pretend==1.0.9
      - pytest-cov==6.0.0
      - pytest-rerunfailures==15.0
      - pytest-timeout==2.3.1
      - pytest-xdist==3.6.1
      - python-dateutil==2.9.0.post0
      - pyyaml==6.0.2
      - scripttest==2.0
      - six==1.17.0
      - virtualenv==20.29.3
prefix: /opt/conda/envs/pip

tests/unit/test_index.py::TestPackageFinder::test_add_trusted_host tests/unit/test_index.py::TestPackageFinder::test_add_trusted_host__logging tests/unit/test_req_file.py::TestProcessLine::test_set_finder_trusted_host
tests/unit/test_index.py::test_check_link_requires_python[== tests/unit/test_index.py::test_check_link_requires_python[invalid-True] tests/unit/test_index.py::test_check_link_requires_python__incompatible_python[None-expected0] tests/unit/test_index.py::test_check_link_requires_python__incompatible_python[True-expected1] tests/unit/test_index.py::test_check_link_requires_python__invalid_requires tests/unit/test_index.py::TestCandidateEvaluator::test_init__target_python tests/unit/test_index.py::TestCandidateEvaluator::test_init__target_python_none tests/unit/test_index.py::TestCandidateEvaluator::test_evaluate_link[py_version_info0-None-expected0] tests/unit/test_index.py::TestCandidateEvaluator::test_evaluate_link[py_version_info1-None-expected1] tests/unit/test_index.py::TestCandidateEvaluator::test_evaluate_link[py_version_info2-True-expected2] tests/unit/test_index.py::TestCandidateEvaluator::test_evaluate_link__incompatible_wheel tests/unit/test_index.py::TestPackageFinder::test_create__target_python tests/unit/test_index.py::TestPackageFinder::test_iter_secure_origins tests/unit/test_index.py::TestPackageFinder::test_iter_secure_origins__none_trusted_hosts tests/unit/test_index.py::test_sort_locations_file_expand_dir tests/unit/test_index.py::test_sort_locations_file_not_find_link tests/unit/test_index.py::test_sort_locations_non_existing_path tests/unit/test_index.py::TestLink::test_splitext tests/unit/test_index.py::TestLink::test_filename[http://yo/wheel.whl-wheel.whl] tests/unit/test_index.py::TestLink::test_filename[http://yo/wheel-wheel] tests/unit/test_index.py::TestLink::test_filename[http://yo/myproject-1.0%2Bfoobar.0-py2.py3-none-any.whl-myproject-1.0+foobar.0-py2.py3-none-any.whl] tests/unit/test_index.py::TestLink::test_no_ext tests/unit/test_index.py::TestLink::test_ext tests/unit/test_index.py::TestLink::test_ext_fragment tests/unit/test_index.py::TestLink::test_ext_query tests/unit/test_index.py::TestLink::test_is_wheel tests/unit/test_index.py::TestLink::test_is_wheel_false tests/unit/test_index.py::TestLink::test_fragments tests/unit/test_index.py::test_determine_base_url[<html></html>-https://example.com/-https://example.com/] tests/unit/test_index.py::test_determine_base_url[<html><head><base tests/unit/test_index.py::test_determine_base_url[<html><head><base><base tests/unit/test_index.py::test_secure_origin[http://pypi.org/something-trusted0-True] tests/unit/test_index.py::test_secure_origin[https://pypi.org/something-trusted1-False] tests/unit/test_index.py::test_secure_origin[git+http://pypi.org/something-trusted2-True] tests/unit/test_index.py::test_secure_origin[git+https://pypi.org/something-trusted3-False] tests/unit/test_index.py::test_secure_origin[git+ssh://git@pypi.org/something-trusted4-False] tests/unit/test_index.py::test_secure_origin[http://localhost-trusted5-False] tests/unit/test_index.py::test_secure_origin[http://127.0.0.1-trusted6-False] tests/unit/test_index.py::test_secure_origin[http://example.com/something/-trusted7-True] tests/unit/test_index.py::test_secure_origin[http://example.com/something/-trusted8-False] tests/unit/test_index.py::test_secure_origin[http://eXample.com/something/-trusted9-False] tests/unit/test_index.py::test_get_formatted_locations_basic_auth tests/unit/test_index.py::test_find_name_version_sep[pip-18.0-pip-3] tests/unit/test_index.py::test_find_name_version_sep[zope-interface-4.5.0-zope-interface-14] tests/unit/test_index.py::test_find_name_version_sep[Jinja2-2.10-jinja2-6] tests/unit/test_index.py::test_find_name_version_sep[zope.interface-4.5.0-zope-interface-14] tests/unit/test_index.py::test_find_name_version_sep[zope_interface-4.5.0-zope-interface-14] tests/unit/test_index.py::test_find_name_version_sep[foo-2-2-foo-3] tests/unit/test_index.py::test_find_name_version_sep[foo-2-2-foo-2-5] tests/unit/test_index.py::test_find_name_version_sep[foo--bar-1.0-foo-bar-8] tests/unit/test_index.py::test_find_name_version_sep[foo-_bar-1.0-foo-bar-8] tests/unit/test_index.py::test_find_name_version_sep[zope.interface--4.5.0-zope-interface-14] tests/unit/test_index.py::test_find_name_version_sep[zope.interface---zope-interface-14] tests/unit/test_index.py::test_find_name_version_sep[zope.interface--zope-interface-14] tests/unit/test_index.py::test_find_name_version_sep_failure[zope.interface4.5.0-zope-interface] tests/unit/test_index.py::test_find_name_version_sep_failure[zope.interface.4.5.0-zope-interface] tests/unit/test_index.py::test_find_name_version_sep_failure[zope.interface.-4.5.0-zope-interface] tests/unit/test_index.py::test_find_name_version_sep_failure[zope.interface-zope-interface] tests/unit/test_index.py::test_egg_info_matches[pip-18.0-pip-18.0] tests/unit/test_index.py::test_egg_info_matches[zope-interface-4.5.0-zope-interface-4.5.0] tests/unit/test_index.py::test_egg_info_matches[Jinja2-2.10-jinja2-2.10] tests/unit/test_index.py::test_egg_info_matches[zope.interface-4.5.0-zope-interface-4.5.0] tests/unit/test_index.py::test_egg_info_matches[zope_interface-4.5.0-zope-interface-4.5.0] tests/unit/test_index.py::test_egg_info_matches[foo-2-2-foo-2-2_0] tests/unit/test_index.py::test_egg_info_matches[foo-2-2-foo-2-2_1] tests/unit/test_index.py::test_egg_info_matches[zope.interface--4.5.0-zope-interface--4.5.0] tests/unit/test_index.py::test_egg_info_matches[zope.interface---zope-interface--] tests/unit/test_index.py::test_egg_info_matches[foo--bar-1.0-foo-bar-1.0] tests/unit/test_index.py::test_egg_info_matches[foo-_bar-1.0-foo-bar-1.0] tests/unit/test_index.py::test_egg_info_matches[the-package-name-8.19-does-not-match-None] tests/unit/test_index.py::test_egg_info_matches[zope.interface.-4.5.0-zope.interface-None] tests/unit/test_index.py::test_egg_info_matches[zope.interface--zope-interface-None] tests/unit/test_index.py::test_egg_info_matches[zope.interface4.5.0-zope-interface-None] tests/unit/test_index.py::test_egg_info_matches[zope.interface.4.5.0-zope-interface-None] tests/unit/test_index.py::test_egg_info_matches[zope.interface.-4.5.0-zope-interface-None] tests/unit/test_index.py::test_egg_info_matches[zope.interface-zope-interface-None] tests/unit/test_index.py::test_request_http_error tests/unit/test_index.py::test_request_retries tests/unit/test_index.py::test_clean_link[https://localhost.localdomain:8181/path/with tests/unit/test_index.py::test_clean_link[https://localhost.localdomain:8181/path/with%20quoted%20space/-https://localhost.localdomain:8181/path/with%20quoted%20space/] tests/unit/test_index.py::test_clean_link[https://127.0.0.1:8181/path/with tests/unit/test_index.py::test_clean_link[https://[fd00:0:0:236::100]:8181/path/with tests/unit/test_index.py::test_clean_link[https://localhost.localdomain:8181/path/with/query?request=test-https://localhost.localdomain:8181/path/with/query?request=test] tests/unit/test_index.py::test_clean_link[https://localhost.localdomain:8181/path:/with:/colon-https://localhost.localdomain:8181/path%3A/with%3A/colon] tests/unit/test_index.py::test_clean_link[https://localhost.localdomain/T:/path/-https://localhost.localdomain/T%3A/path/] tests/unit/test_index.py::test_clean_link[git+ssh://example.com/path tests/unit/test_index.py::test_clean_link_non_windows[file:///T:/path/with tests/unit/test_req_file.py::TestPreprocess::test_comments_and_joins_case1 tests/unit/test_req_file.py::TestPreprocess::test_comments_and_joins_case2 tests/unit/test_req_file.py::TestPreprocess::test_comments_and_joins_case3 tests/unit/test_req_file.py::TestPreprocess::test_skip_regex_after_joining_case1 tests/unit/test_req_file.py::TestPreprocess::test_skip_regex_after_joining_case2 tests/unit/test_req_file.py::TestIgnoreComments::test_ignore_line tests/unit/test_req_file.py::TestIgnoreComments::test_ignore_comment tests/unit/test_req_file.py::TestIgnoreComments::test_strip_comment tests/unit/test_req_file.py::TestJoinLines::test_join_lines tests/unit/test_req_file.py::TestJoinLines::test_last_line_with_escape tests/unit/test_req_file.py::TestSkipRegex::test_skip_regex_pattern_match tests/unit/test_req_file.py::TestSkipRegex::test_skip_regex_pattern_not_match tests/unit/test_req_file.py::TestSkipRegex::test_skip_regex_no_options tests/unit/test_req_file.py::TestSkipRegex::test_skip_regex_no_skip_option tests/unit/test_req_file.py::TestProcessLine::test_parser_error tests/unit/test_req_file.py::TestProcessLine::test_parser_offending_line tests/unit/test_req_file.py::TestProcessLine::test_parser_non_offending_line tests/unit/test_req_file.py::TestProcessLine::test_only_one_req_per_line tests/unit/test_req_file.py::TestProcessLine::test_yield_line_requirement tests/unit/test_req_file.py::TestProcessLine::test_yield_line_constraint tests/unit/test_req_file.py::TestProcessLine::test_yield_line_requirement_with_spaces_in_specifier tests/unit/test_req_file.py::TestProcessLine::test_yield_editable_requirement tests/unit/test_req_file.py::TestProcessLine::test_yield_editable_constraint tests/unit/test_req_file.py::TestProcessLine::test_nested_requirements_file tests/unit/test_req_file.py::TestProcessLine::test_nested_constraints_file tests/unit/test_req_file.py::TestProcessLine::test_options_on_a_requirement_line tests/unit/test_req_file.py::TestProcessLine::test_hash_options tests/unit/test_req_file.py::TestProcessLine::test_set_isolated tests/unit/test_req_file.py::TestProcessLine::test_set_finder_no_index tests/unit/test_req_file.py::TestProcessLine::test_set_finder_index_url tests/unit/test_req_file.py::TestProcessLine::test_set_finder_find_links tests/unit/test_req_file.py::TestProcessLine::test_set_finder_extra_index_urls tests/unit/test_req_file.py::TestProcessLine::test_noop_always_unzip tests/unit/test_req_file.py::TestProcessLine::test_set_finder_allow_all_prereleases tests/unit/test_req_file.py::TestProcessLine::test_relative_local_find_links tests/unit/test_req_file.py::TestProcessLine::test_relative_http_nested_req_files tests/unit/test_req_file.py::TestProcessLine::test_relative_local_nested_req_files tests/unit/test_req_file.py::TestProcessLine::test_absolute_local_nested_req_files tests/unit/test_req_file.py::TestProcessLine::test_absolute_http_nested_req_file_in_local tests/unit/test_req_file.py::TestBreakOptionsArgs::test_no_args tests/unit/test_req_file.py::TestBreakOptionsArgs::test_no_options tests/unit/test_req_file.py::TestBreakOptionsArgs::test_args_short_options tests/unit/test_req_file.py::TestBreakOptionsArgs::test_args_long_options tests/unit/test_req_file.py::TestOptionVariants::test_variant1 tests/unit/test_req_file.py::TestOptionVariants::test_variant2 tests/unit/test_req_file.py::TestOptionVariants::test_variant3 tests/unit/test_req_file.py::TestOptionVariants::test_variant4 tests/unit/test_req_file.py::TestOptionVariants::test_variant5 tests/unit/test_req_file.py::TestParseRequirements::test_remote_reqs_parse tests/unit/test_req_file.py::TestParseRequirements::test_multiple_appending_options tests/unit/test_req_file.py::TestParseRequirements::test_skip_regex tests/unit/test_req_file.py::TestParseRequirements::test_expand_existing_env_variables tests/unit/test_req_file.py::TestParseRequirements::test_expand_missing_env_variables tests/unit/test_req_file.py::TestParseRequirements::test_join_lines tests/unit/test_req_file.py::TestParseRequirements::test_req_file_parse_no_only_binary tests/unit/test_req_file.py::TestParseRequirements::test_req_file_parse_comment_start_of_line tests/unit/test_req_file.py::TestParseRequirements::test_req_file_parse_comment_end_of_line_with_url tests/unit/test_req_file.py::TestParseRequirements::test_req_file_parse_egginfo_end_of_line_with_url tests/unit/test_req_file.py::TestParseRequirements::test_req_file_no_finder tests/unit/test_req_file.py::TestParseRequirements::test_install_requirements_with_options
src/pip/_internal/req/req_file.py docs/html/reference/pip_install.rst src/pip/_internal/download.py src/pip/_internal/index.py news/3799.feature
src/pip/_internal/req/req_file.py docs/html/reference/pip_install.rst src/pip/_internal/download.py src/pip/_internal/index.py news/3799.feature