Skip to content

Config file discovery doesn't work as intended #2096

@un-def

Description

@un-def

As it stated in the documentation, pip-tools look for the configuration file “in the same directory as your requirements input files”. However, due to the way click works, it's not true:

  1. --config (and --no-config) is declared as eager: https://github.com/jazzband/pip-tools/blob/7.4.1/piptools/scripts/options.py#L317-L333
  2. --config's callback override_defaults_from_config_file tries to get the src_files param value to compute the config path relative to the source files: https://github.com/jazzband/pip-tools/blob/7.4.1/piptools/utils.py#L543
  3. But since callbacks of eager options are called before other options are processed, src_files is always empty. From the click documentation: “All eager parameters are evaluated before all non-eager parameters, but again in the order as they were provided on the command line by the user.”
  4. select_config_file falls back to the current working dir as a config file location: https://github.com/jazzband/pip-tools/blob/7.4.1/piptools/utils.py#L627-L630

Environment Versions

  1. Linux
  2. Python version: Python 3.12.3
  3. pip version: pip 24.0
  4. pip-tools version: pip-compile, version 7.4.1

Steps to replicate

  1. Create the requirements directory requirements/ with requirements.in.
  2. Create the configuration file .pip-tools.toml or pyproject.toml with generate-hashes = true.
  3. Run pip compile requirements/requirements.in.

Expected result

requirements/requirements.txt contains hashes.

Actual result

requirements/requirements.txt has no hashes; the configuration file is ignored.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is not workingconfigRelated to pip-tools' configurationduplicateDuplicate of an existing issue/PR

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions