Skip to main content

A time machine for your Python environment. Install packages as they existed on a given date.

Project description

pipt Logo

The Python Package Time Machine

Install dependencies as they existed on any given date.

CI PyPI


pipt is a command-line tool that acts as a time machine for your Python environment. It lets you install packages and their dependencies exactly as they were on a specific date, making past environments reproducible without hunting down historical versions by hand.

It's not a new package manager. It wraps pip, using its resolver to do the heavy lifting while pipt finds the right time-appropriate releases for you.

Quickstart

  • See what you’d get as of a date:
pipt resolve "pandas<2.0" --date 2023-01-01
  • Install with a cutoff date:
pipt install "pandas<2.0" --date 2023-01-01
  • Create a lockfile you can install with pip later:
pipt lock django --date 2021-03-15 > requirements.lock
pip install -r requirements.lock
  • No date? Behaves like pip:
pipt install requests  # passes through to pip install

Key Features

  • Reproducible builds tied to a specific date
  • Optional cutoff: without --date, pipt behaves like pip
  • Date strategies: --date-mode before (default) or --date-mode nearest
  • Intelligent failure analysis with actionable messages
  • Preflight environment checks (Requires-Python, wheel tags) with Python version suggestions
  • Lockfile generation compatible with pip
  • Works with your existing workflows (constraints, pre-releases, yanked handling)
  • Polished CLI powered by rich

Installation

pip install pipt

Or with pipx (recommended for global CLI tools):

pipx install pipt

How It Works

pipt iteratively refines version constraints. It starts from your requested requirements, selects the latest releases that existed on the cutoff date, and runs pip's resolver in a dry run. If transitive dependencies are too new, pipt tightens constraints and repeats until a historically accurate plan is found.

It also performs a lightweight preflight check to surface environment incompatibilities early (e.g., no wheels for your Python/platform for the cutoff-era release) and will suggest the minimum Python version inferred from wheel filenames or Requires-Python.

Usage

Install a package as of a date

# Install pandas as it was on New Year's Day 2023
pipt install "pandas<2.0" --date 2023-01-01

Resolve (dry run) without installing

# See the dependency plan for flask on June 1st, 2022
pipt resolve flask --date 2022-06-01

Add JSON output if you want to script around the result:

pipt resolve flask --date 2022-06-01 --json

Create a pip-compatible lockfile

# Lock Django and its dependencies to their state on March 15th, 2021
pipt lock django --date 2021-03-15 > requirements.lock

# Include hashes for extra integrity
pipt lock django --date 2021-03-15 --include-hashes > requirements.lock

List available versions before a date

# List all versions of requests published before 2020
pipt list requests --before 2020-01-01

Diagnose without installing

# See environment summary, latest allowed by cutoff, and wheel/Requires-Python info
pipt diagnose numpy --date 2021-01-01

Handy options

  • --pre: allow pre-releases when needed
  • --allow-yanked: include yanked releases
  • --python-version X.Y: resolve as if running on Python X.Y (respects Requires-Python)
  • -c constraints.txt: layer your own constraints
  • --allow-source: in historical mode, permit building from source (disables binary-only)
  • --date-mode nearest: pick the version closest to the cutoff (experimental)
  • Global -v: show the exact pip command and raw output

Compatibility

  • Python: 3.9–3.12
  • Platforms: Linux, macOS, Windows

Contributing

Contributions are welcome! See the Contributing Guide.

License

pipt is licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pipt-0.1.7.tar.gz (20.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pipt-0.1.7-py3-none-any.whl (20.9 kB view details)

Uploaded Python 3

File details

Details for the file pipt-0.1.7.tar.gz.

File metadata

  • Download URL: pipt-0.1.7.tar.gz
  • Upload date:
  • Size: 20.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pipt-0.1.7.tar.gz
Algorithm Hash digest
SHA256 664aaa95ce0127f4f4aea0076aa48c0668f433d9afbb0db75c972842accc8803
MD5 b0d77074f44fd28a405af278cdd3e22d
BLAKE2b-256 17bfd4346b5cf85b21819f5902757b79b16aea145c352ef84c330f78dc61ad86

See more details on using hashes here.

Provenance

The following attestation bundles were made for pipt-0.1.7.tar.gz:

Publisher: publish.yml on OsamaS99/pipt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pipt-0.1.7-py3-none-any.whl.

File metadata

  • Download URL: pipt-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 20.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pipt-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 102279d1f3d5199913767d36845cf33728a6e2a65b7782ca5182ab91ba7610ed
MD5 0952c98be1d0c1f44b8d1b2b0d351f62
BLAKE2b-256 a7e45269d7c704079da16a5d47dfa09f945dcf5acfffdc19ba2b0b74d3024006

See more details on using hashes here.

Provenance

The following attestation bundles were made for pipt-0.1.7-py3-none-any.whl:

Publisher: publish.yml on OsamaS99/pipt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page