A time machine for your Python environment. Install packages as they existed on a given date.
Project description
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
664aaa95ce0127f4f4aea0076aa48c0668f433d9afbb0db75c972842accc8803
|
|
| MD5 |
b0d77074f44fd28a405af278cdd3e22d
|
|
| BLAKE2b-256 |
17bfd4346b5cf85b21819f5902757b79b16aea145c352ef84c330f78dc61ad86
|
Provenance
The following attestation bundles were made for pipt-0.1.7.tar.gz:
Publisher:
publish.yml on OsamaS99/pipt
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pipt-0.1.7.tar.gz -
Subject digest:
664aaa95ce0127f4f4aea0076aa48c0668f433d9afbb0db75c972842accc8803 - Sigstore transparency entry: 452857030
- Sigstore integration time:
-
Permalink:
OsamaS99/pipt@af6f49bae3a7a2d4d4944b15cd44fef110af7d17 -
Branch / Tag:
refs/tags/v0.1.7 - Owner: https://github.com/OsamaS99
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@af6f49bae3a7a2d4d4944b15cd44fef110af7d17 -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
102279d1f3d5199913767d36845cf33728a6e2a65b7782ca5182ab91ba7610ed
|
|
| MD5 |
0952c98be1d0c1f44b8d1b2b0d351f62
|
|
| BLAKE2b-256 |
a7e45269d7c704079da16a5d47dfa09f945dcf5acfffdc19ba2b0b74d3024006
|
Provenance
The following attestation bundles were made for pipt-0.1.7-py3-none-any.whl:
Publisher:
publish.yml on OsamaS99/pipt
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pipt-0.1.7-py3-none-any.whl -
Subject digest:
102279d1f3d5199913767d36845cf33728a6e2a65b7782ca5182ab91ba7610ed - Sigstore transparency entry: 452857031
- Sigstore integration time:
-
Permalink:
OsamaS99/pipt@af6f49bae3a7a2d4d4944b15cd44fef110af7d17 -
Branch / Tag:
refs/tags/v0.1.7 - Owner: https://github.com/OsamaS99
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@af6f49bae3a7a2d4d4944b15cd44fef110af7d17 -
Trigger Event:
push
-
Statement type: