Skip to main content

A simple measure of software dependency freshness.

Project description

made-with-python Open Source Love svg1 PyPI version fury.io

This is a fork of libyear as it appears to no longer be maintained.

[py]libyear

A simple measure of software dependency freshness. It is a single number telling you how up-to-date your dependencies are.

https://libyear.com/

Demo Image

How to install

Using uvx

uvx --from pylibyear libyear --help

Using pip

pip install pylibyear

Using pipx

pipx install pylibyear

Usage

libyear --help

A requirement text file

libyear text requirements.txt

A pyproject.toml file

libyear toml pyproject.toml

Example output

libyear text requirements.txt
+-------------------------+-----------------+----------------+-----------------+
|         Library         | Current Version | Latest Version | Libyears behind |
+-------------------------+-----------------+----------------+-----------------+
|           pytz          |      2015.2     |     2019.3     |       4.54      |
|         urllib3         |      1.15.1     |     1.25.7     |       3.58      |
|         astroid         |      1.5.3      |     2.3.3      |       2.43      |
|          django         |     1.11.23     |      3.0       |       0.34      |
|      django-celery      |      3.2.1      |     3.3.1      |       2.54      |
|        httpretty        |      0.8.3      |     0.9.7      |       5.31      |
|         Pygments        |       1.6       |     2.5.2      |       6.81      |
|          flake8         |      3.6.0      |     3.7.9      |       1.01      |
|      django-waffle      |      0.14.0     |     0.18.0     |       1.66      |
|    requests_oauthlib    |      0.8.0      |     1.3.0      |       2.72      |
|   django-debug-toolbar  |       1.8       |      2.1       |       2.52      |
|         libsass         |      0.13.3     |     0.19.4     |       2.06      |
|     django-storages     |      1.6.6      |      1.8       |       1.65      |
|      edx-i18n-tools     |      0.4.2      |     0.5.0      |       2.02      |
|           six           |      1.10.0     |     1.13.0     |       4.08      |
|   djangorestframework   |      3.6.3      |     3.11.0     |       2.58      |
|          isort          |      4.2.15     |     4.3.21     |       2.05      |
|         futures         |      2.1.6      |     3.3.0      |       5.5       |
|          Pillow         |      2.7.0      |     6.2.1      |       4.8       |
| edx-django-release-util |      0.3.1      |     0.3.2      |       2.44      |
|      beautifulsoup4     |      4.6.0      |     4.8.1      |       2.42      |
|       mysqlclient       |   1.4.2.post1   |     1.4.6      |       0.77      |
|         newrelic        |    4.14.0.115   |   5.4.0.132    |       0.78      |
|          redis          |      2.10.6     |     3.3.11     |       2.16      |
|         oauthlib        |      2.1.0      |     3.1.0      |       1.21      |
|        django-ses       |      0.7.1      |     0.8.13     |       3.65      |
|           mock          |      1.3.0      |     3.0.5      |       3.79      |
|      django-hamlpy      |      1.1.1      |      1.2       |       1.52      |
|          bottle         |      0.12.9     |    0.12.18     |       4.1       |
|      pylint-django      |      0.7.2      |     2.0.13     |       3.44      |
|       user-agents       |      1.1.0      |      2.0       |       2.13      |
|          jsmin          |      2.2.1      |     2.2.2      |       1.15      |
|         Markdown        |       2.4       |     3.1.1      |       5.26      |
|         gunicorn        |      0.17.4     |     20.0.4     |       6.59      |
|         requests        |      2.18.4     |     2.22.0     |       1.75      |
|          pylint         |      1.7.2      |     2.4.4      |       2.39      |
+-------------------------+-----------------+----------------+-----------------+
Your system is 103.78 libyears behind

Example 1

For example, a rails 5.0.0 dependency (released June 30, 2016) is roughly 1 libyear behind the 5.1.2 version (released June 26, 2017).

Simpler is Better

There are obviously more nuanced ways to calculate dependency freshness. The advantage of this approach is its simplicity. You will be able to explain this calculation to your colleagues in about 30s.

Example 2

If your system has two dependencies, the first one year old, the second three, then your system is four libyears out-of-date.

A Healthy App

Apps below 10 libyears are considered to be healthy apps. We regularly rescue projects that are over 100 libyears behind.

Etymology

"lib" is short for "library", the most common form of dependency.

References

J. Cox, E. Bouwers, M. van Eekelen and J. Visser, Measuring Dependency Freshness in Software Systems. In Proceedings of the 37th International Conference on Software Engineering (ICSE 2015), May 2015 https://ericbouwers.github.io/papers/icse15.pdf

Dev

To install dependencies

uv sync --all-extras

Then run this command to install in editable mode for local development

uv pip install -e .

Available justfile recipes:

just

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

pylibyear-0.4.1.tar.gz (11.4 MB view details)

Uploaded Source

Built Distribution

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

pylibyear-0.4.1-py3-none-any.whl (9.7 kB view details)

Uploaded Python 3

File details

Details for the file pylibyear-0.4.1.tar.gz.

File metadata

  • Download URL: pylibyear-0.4.1.tar.gz
  • Upload date:
  • Size: 11.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pylibyear-0.4.1.tar.gz
Algorithm Hash digest
SHA256 30ca4425cd93d3edbbdc4b46ccd03400a96c5c33dbd1ecb83a9e8d5d13549aa1
MD5 d559983c77e765d418ab7ffd34d75dba
BLAKE2b-256 0842bf863095378713e71bec93474f7e3da6a019a1abade0256651c6dda1562a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibyear-0.4.1.tar.gz:

Publisher: pythonpublish.yml on sam-atkins/pylibyear

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

File details

Details for the file pylibyear-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: pylibyear-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 9.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pylibyear-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e5edfbe28ee780ec3464f3e8ff95d7a8b605993528d46e6e0ca1801af73ddc1a
MD5 084aacd906b6fd54c4af35ec3e7a11dd
BLAKE2b-256 e20fa52ee56ac1dfd3b1e0fce199454bc3f8a801a45e2b97bf2a64dbbb285887

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibyear-0.4.1-py3-none-any.whl:

Publisher: pythonpublish.yml on sam-atkins/pylibyear

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