Skip to main content

Run a PyPI server from the past

Project description

Do you wish you could just install packages with pip as if you were at some fixed date in the past? If so, the PyPI time machine is for you!

Disclaimer: this is alpha-quality software - for now it is a quick hack, but I’d love to make this more robust/usable with your help!

Installing

To install:

pip install pypi-timemachine

Using

Once installed, you can run a PyPI server with:

pypi-timemachine 2021-02-03

or if you need to specify a precise time (in UTC):

pypi-timemachine 2021-02-03T12:33:02

This will start up a webapp running uvicorn, and will print out a line such as:

pypi-timemachine server listening at http://localhost:5000  (Press CTRL+C to quit)
  Hint: Setting the environment variable PIP_INDEX_URL="http://localhost:5000" is one way to configure pip to use this timemachine

You can then configure pip to use the time machine, for example:

pip install --index-url http://127.0.0.1:5000/ astropy

and this will then install the requested packages and all dependencies, ignoring any releases after the cutoff date specified above.

For convenience, it is also possible to specify the cutoff date as part of the repository URL, using the pattern http://{host}/snapshot/{cutoff_date}/. Cutoff date can be either an RFC 3339 timestamp (e.g. 2006-12-02T02:07:43Z) or a simple date (e.g., 2006-12-02). For example:

pip install --index-url http://127.0.0.1:5000/snapshot/2024-12-03 astropy

Would install the requested packages and all dependencies from the date given in the index URL.

It is possible to run the time machine against a custom Python package repository, provided it includes date metadata as defined in PEP-700, specifically the upload-time field:

pypi-timemachine 2021-02-03 --index-url https://my-custom-repo/simple/

How it works

pypi-timemachine builds upon the simple-repository stack, and uses the standards based PEP-503 repository definition to serve packages. In order to filter by time, the upstream repository must provide PEP-700 metadata (which PyPI does). The results are filtered by pypi-timemachine, and then served as HTML or JSON via the standard PEP-503 interface.

Caveats/warnings

If a package is already installed, pip will not try installing it again. This means that if e.g. you try and run pip as described above, but the package you are trying to install (or any of its dependencies) is already installed, no matter how recent the version, it will not be installed again. Therefore, I recommend using pip with the custom index URL inside a clean environment (but you can run the pypi-timemachine command inside your regular environment.)

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

pypi_timemachine-0.3.1.tar.gz (7.4 kB view details)

Uploaded Source

Built Distribution

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

pypi_timemachine-0.3.1-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file pypi_timemachine-0.3.1.tar.gz.

File metadata

  • Download URL: pypi_timemachine-0.3.1.tar.gz
  • Upload date:
  • Size: 7.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pypi_timemachine-0.3.1.tar.gz
Algorithm Hash digest
SHA256 ba1e32cb4f41a4f662d0b48d50671b82eb27856cdde7c9bcdd2f72365d578954
MD5 309a96a190df1c98134d12fe892a1d1e
BLAKE2b-256 b8146f93a39dddc8bad1fc6941dc398a4b32ec0c30d84a3acd0af242dc0d0eab

See more details on using hashes here.

File details

Details for the file pypi_timemachine-0.3.1-py3-none-any.whl.

File metadata

File hashes

Hashes for pypi_timemachine-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ad0d852263c130b4d7ec68224e96e9221b89a15a489e4c245e83c4a1d82700c6
MD5 c6305c076809f91f06de8ace48386fd7
BLAKE2b-256 af233307dbbfd806eb9f5823c2465b9c518089bb13eb8a94836c56b5665cb300

See more details on using hashes here.

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