This project uses towncrier and the changes for the upcoming release can be found in https://github.com/sbidoul/pip-deepfreeze/tree/master/news/.
- Make
uv
and optional dependency again. Sinceuv
is meant to be install globally, this makes more sense, and also easier to benefit fromuv
upgrades. (#162)
- Also pass
--no-input
to pip when it is installed in the target venv. (#158) - Ensure we don't use setuptools>=71 (#159)
- Force refresh of project metadata when using
uv
(#160)
- Use
uv
for freeze and uninstall operations too whenuvpip
has been selected. (#156) - Don't do the direct url fixup optimization hack when
uvpip
has been selected. (#156)
- Add support for pre-sync commands. (#152)
- Pass
--no-input
to pip commands, to avoid silently blocking on user input. (#131) - Use
uv
's--python
option to select the interpreter, instead of passing it as aVIRTUAL_ENV
environment variable. This is more explicit and hopefully more resilient to changes inuv
's Python detection logic. (#145)
- Change
--installer=uv
to--installer=uvpip
. This is a breaking change that we do while this is young, to avoid possible confusion in the future with otheruv
install mechanisms that are on their roadmap. (#144)
- Allow to declare minimum pip-deepfreeze version in
pyproject.toml
.pip-deepfreeze
verifies its version according totool.pip-deepfreeze.min_version
, so a project can ensure all contributors have the minmum required version. (#95) - Always install
uv
as a dependency. Consequently, theuv
extra is removed. (#143)
- Read constraints from
constraints.txt
(and fallback torequirements.txt.in
if it is absent), as this name better matches the purpose of the file. (#59)
- Improve compatibility with
uv
, by passing installer options via command line instead of requirements file (this does not change how options are set by the user inconstraints.txt
orrequirements.txt.in
). (#138)
- Support environments where pip is not installed. (#98)
- Add experimental support for uv as
the installation command. A new
--installer
option is available to select the installer to use. (#135)
- Silence a deprecation warning about
pkg_resources
. (#133) - Sort requirement files by canonical requirement name to help ensure stability and comparability. (#134)
- Normalize distribution names in the generated lock files. This change,
which will cause some churn in generated
requirements*.txt
files, was made following a setuptools 69 evolution that started preserving underscores in distribution names. (#132)
- Pin pip, setuptools, wheel and distribute when they are dependencies
of the project. Before they were not pinned in the
requirements*.txt
lock file because they were not reported by pip freeze. Now we pin them but never propose to uninstall them. (#123)
- Set working directory to project root when running post sync commands. (#126)
- Don't attempt to fixup VCS direct URLs for older python versions. It did not work with python 2.7 and pip's legacy resolver that is the default with these older pythons does not need this workaround. (#127)
- Use
pip inspect
when the target pip supports it. This allows working in virtual environments wheresetuptools
(and thuspkg_resources
) are not installed. (#97) - Don't warn about the absence of the
wheel
package when usingpip
>= 23.1. (#101) - Search for
py
, thenpython
executable inPATH
when the--python
option is not provided. This should provide a better experience on Windows and for users of the the Python Launcher for Unix. (#100) - Support named editable requirements in constraint files
(
requirements.txt.in
) and lock files (requirements*.txt
). (#110) - Improved handling of the temporary requirements file created during sync. (#115)
- Work around a pip limitation that causes repeated metadata
recomputation for VCS URLs. When a constraint is provided with a VCS
URL with a mutable reference, pip installs it but does not cache the
wheel. During subsequent
pip-df sync
runs, the metadata is therefore recomputed (because it is not cached), but the wheel is never built because pip rightly considers it is already installed. So it is never cached and this causes performance issues. As a workaround we fixupdirect_url.json
with a fake commit to force reinstallation (and therefore caching of the wheel) during subsequent sync with the pinned commit id. (#119) - Add
pip-deepfreeze --version
. (#120)
- Drop support for running pip-deepfreeze under python 3.7. We still support 3.7 target environments. (#112)
- Don't show a stack trace when a post sync commands fails. (#91)
- Avoid needlessly reinstalling Direct URL requirements that are not pinned exactly as pip freeze does. (#93)
- Read some configuration defaults from
pyproject.toml
. (#83) - Support pyproject.toml without build system to detect project name. (#84)
- Add post-sync commands. (#86)
- Read pyproject.toml using utf-8 encoding. (#90)
- Drop support for running pip-deepfreeze under python 3.6. We still support 3.6 target environments. (#88)
Release 1.0, no feature change.
- Remove
--no-use-pip-constraints
option. Users should switch to a pip version that supports URL constraints, which is all of them for the legacy resolver, and 21.1+ for the new resolver. (#60) - An editable installation of the project is now always done by pip-deepfreeze. The --editable option is removed as well as the attempt to detect if the project is editable. This allows correct support for projects that support PEP 660 and do not have a setup.py. (#65)
- Now that PEP 621 is in provisional state, use it to detect the project name. (#56)
- Rename
--extra
short option from-e
to-x
, to avoid confusion with pip's-e
which is for editables. (#57)
- Fixed an issue that prevented running
pip-df sync
after adding an extra to the setup.py/setup.cfg of an already installed project. (#49) pip-df sync --extras
now warns but otherwise ignores unknown extras. (#50)
Minor documentation improvements and internal tweaks.
- Support extras. (#9)
- Check prerequisites (pip, setuptools/pkg_resources) in the target environment. (#37)
- Refuse to start if the target python is not running in a virtualenv, or if the virtualenv includes system site packages. This would be dangerous, risking removing or updating system packages. (#38)
- Python 3.9 compatibility. (#45)
- Improved logging of changes made to
requirements*.txt
. (#46)
- Improve project name detection robustness. (#39)
- Improved the documentation with the How to section.
- Use
pip
's--constraints
mode by default when passing pinned dependencies and constraints to pip. In case this causes trouble (e.g. when using direct URLs with the new pip resolver), this can be disabled with--no-use-pip-constraints
. (#31) --update
is changed to accept a comma-separated list of distribution names. (#33)- Add
--extras
option topip-df tree
command, to considerextras
of the project when printing the tree of installed dependencies. (#34)
- Add -p short option for selecting the python interpreter (same as --python). (#27)
- Add --project-root global option, to select the project directory. (#28)
- Add
tree
command to print the installed dependencies of the project as a tree. The print out includes the installed version (and direct URL if any), and highlights missing dependencies. (#29) - Add built-in knowledge of some build backends (setuptools' setup.cfg, flit, generic PEP 621) so we can obtain the project name faster, without doing a full PEP 517 metadata preparation. (#30)
- Refactor installed dependencies discovery. (#26)
- Add
--uninstall-unneeded
option to uninstall distributions that are not dependencies of the project. (#11) - More complete and visible logging. We log the main steps in blue to distinguish them from pip logs. (#16)
- Windows and macOS compatibility. (#17)
- Add
--verbose
option. (#22)
- Better reporting of subprocess errors. (#6)
- For now we do not use
pip install --constraints
because it has limitations and does not support VCS references with the new pip resolver. (#7)
- Fix pkg_resources.VersionConflict error when downgrading an already installed dependency. (#10)
- Better UX if the project does not support editable. Default to editable mode if the project supports it. Fail gracefully if editable mode is requested for a project that does not support it. (#2)
- Detect requirement name of the form egg=name. (#3)
First release.