jazzband / pip-tools

A set of tools to keep your pinned Python dependencies fresh.
https://pip-tools.rtfd.io
BSD 3-Clause "New" or "Revised" License
7.6k stars 607 forks source link

Config file discovery doesn't work as intended #2096

Open un-def opened 1 month ago

un-def commented 1 month ago

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.

chrysle commented 1 month ago

Thanks for raising this issue! Note this was already discovered and the same fix suggested in #1902.

I proposed it in #2048 some time ago, unfortunately it seems to have been forgotten. Thanks for providing the tests though, I might transfer them there.