All Projects → E3V3A → pip-date

E3V3A / pip-date

Licence: GPL-3.0 License
A simple CLI tool to show the installation/modification times of all your pip packages

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to pip-date

ansible-role-pip
Ansible Role - Pip (for Python)
Stars: ✭ 147 (+600%)
Mutual labels:  packaging, pip
Fades
fades is a system that automatically handles the virtualenvs in the cases normally found when writing scripts and simple programs, and even helps to administer big projects.
Stars: ✭ 182 (+766.67%)
Mutual labels:  packaging, pip
Pip Tools
A set of tools to keep your pinned Python dependencies fresh.
Stars: ✭ 5,387 (+25552.38%)
Mutual labels:  packaging, pip
poetry-setup
Generate setup.py (setuptools) from pyproject.toml (poetry)
Stars: ✭ 44 (+109.52%)
Mutual labels:  packaging, pip
Pipenv
Python Development Workflow for Humans.
Stars: ✭ 22,542 (+107242.86%)
Mutual labels:  packaging, pip
integration-test
ensure core packaging tools work well with each other
Stars: ✭ 15 (-28.57%)
Mutual labels:  packaging, pip
minicon
Minimization of the filesystem for containers
Stars: ✭ 70 (+233.33%)
Mutual labels:  packaging
pathofexile-flatpak
Path of Exile Flatpak
Stars: ✭ 11 (-47.62%)
Mutual labels:  packaging
foreman-packaging
Packaging files (RPMs, debs) for Foreman and its dependencies
Stars: ✭ 38 (+80.95%)
Mutual labels:  packaging
torsimany
💡✏️️ ⬇️️ JSON to Markdown converter - Generate Markdown from format independent JSON
Stars: ✭ 49 (+133.33%)
Mutual labels:  pip
TensorFlow-Raspberry-Pi 64-bit
TensorFlow installation wheels for Raspberry Pi 64 OS
Stars: ✭ 27 (+28.57%)
Mutual labels:  pip
networkdays
Networkdays functions ... including `networkdays` excel like function with no dependencies (no NumPy)
Stars: ✭ 22 (+4.76%)
Mutual labels:  dates
cyclonedx-python
Creates CycloneDX Software Bill of Materials (SBOM) from Python projects and environments.
Stars: ✭ 78 (+271.43%)
Mutual labels:  pip
requirements-parser
A Pip requirements file parser.
Stars: ✭ 101 (+380.95%)
Mutual labels:  pip
jasper
🧳 Single-binary packaging for Ruby applications that supports native and Wasm targets
Stars: ✭ 29 (+38.1%)
Mutual labels:  packaging
sauron
👀 Reminds the user to take regular breaks and helps prevent eye strain
Stars: ✭ 24 (+14.29%)
Mutual labels:  pip
pip upgrade outdated
Install outdated python packages.
Stars: ✭ 62 (+195.24%)
Mutual labels:  pip
tox-pip-extensions
Augment tox with different installation methods via progressive enhancement.
Stars: ✭ 38 (+80.95%)
Mutual labels:  pip
rfc-bibtex
A command line tool that creates bibtex entries for IETF RFCs and Internet Drafts.
Stars: ✭ 43 (+104.76%)
Mutual labels:  pip
asymmetric
Ridiculously fast and easy module-to-API transformations. Learn in minutes, implement in seconds. Batteries included.
Stars: ✭ 35 (+66.67%)
Mutual labels:  pip

pip-date - Date your pip packages!

pypi supported versions PyPI version Maintenance GitHub last commit Average time to resolve an issue

A simple Python3 CLI tool to show the installation or modification times of all your pip packages.

STATUS: Version Date Maintained?
Working 1.0.5 2022-01-23 YES

Example Output:

Full

Full

Using pip-search <RegEx>:

Full


Q: What does pip-date do?

The primary use is for finding the time when a certain pip package was last modified or installed. It is basically using one or more of: atime, ctime and mtime from the file status (stat) info. This is essentially equivalent to using the *nix stat command, but is handled differently on Windows. (See below for further details.)

Using this information, it can show you and highlight packages that may have been corrupted or outdated. I also has some functionality of checking packages for outdated and deprecated installation methods.

But it can do more. Some features are:

  • Highlight packages with inconsistent file modification times (mTime).
  • Highlight package versions which are not conforming to the PEP-0440 standard.
  • Highlight packages installed with an unusual package distribution priority given by: [chk, src, bin, egg, dev]
  • Highlight setuptools dependency packages for easy review
  • Show package installation type: with pip/wheel as wheel, and source as sdist (FIX!)
  • Show package installation location: usr for --user and sys for global installations.
  • Show correct file modification time, depending on OS/FS architecture (mtime vs ctime)

Q: What does it not do?

  • Does not install packages
  • Does not show dependencies
  • Does not (yet) show packages in a virtualenv or pipenv envrionment (ToDo)
  • Does not check package consistency
  • Does not show the very first time you installed a package, if it has been updated since.
    (Althought there are left-over artifacts that may show otherwise, we don't look for these.)

Q: Why is this needed?

It probably isn't, BUT...

Because python packages often rely on a large number of sub-dependencies, it is very easy to accidentally overwrite some required dependency of one package with a different version needed by another package. You will never know about it, until it breaks something. One common scenario causing package corruption is that you have installed some package XXX using pip, but then get an OS update and install the update using you OS packagemanagement system, like apt-get install XXX, which would probably overwrite the globally installed pip package. This is especially true for beginners of python, who has not yet learned how to use a virtual environment, and installing evything in either the global system (default) or user (--user) environments. This may also occur when installing packages from sources, or when you have to run some other non-pip installers like setup.py, make install or like, and you don't really know what it is going to do.

Q: What else is included?

  • A script called pip-describe, that will do what pip doesn't, which is to show the full-text long_description for any PyPI package (including those not already installed).

  • A script called pipbyday, that will print a simple table with:
    mTime/aTime + package-name + package-version, sorted by time.

  • A script called pyfileinfo, that will show detailed file and date information for a given file using python's os.stat info.

  • A script called pyOSinfo, that will print a number of os, system and platform variables, as seen by your Python interpreter.

  • NEW A script called (hold your breath!) pip-search, that will download and search all of the PyPi package database for packages matching your search criteria. However, for colored and sexy package searches, I recommend using pip_search. Also, for cool powershell wrapper of pip-search, read this.

Q: Will I continue to support this tool?

Sure, if it is broken, but I will not spend any more time for new features. So if you would like to add something just send me a PR, or at the very least, a detailed code snippet of what I need to implement.


Dependencies

  • requests - used by pip-describe to get PyPI info
  • lxml - used by pip-search to parse html from PyPI

and what you already have:

Installation

There is nothing to install really. Just download the pip-date.py file and make sure to place it in your PATH.

For pip installation:

pip install pip-date

For single file installation:

cd /usr/bin/
wget https://github.com/E3V3A/pip-date/raw/master/pip-date
chmod 755 pip-date

For developer installation:

git clone https://github.com/E3V3A/pip-date.git
cd pip-date
pip install pip-date --user

How to Run

pip-date      # When it's in your PATH
./pip-date    # When it's not in your PATH

References:

Time Stamps

It's quite amusing to see how different OS's and File System's (FS) are handling file time stamps. In the Linux world the available time stamps are called atime, ctime and mtime, where they are generally available through the stat command. However, Windows systems doesn't have this commmand because NTFS is using a different way to keep track of time-stamps, so older python versions would (and Windows OS) would report the wrong values for these. But have since been fixed.

Then we use: os.path.getctime(pkg_loc) to get the file time stamp.

For all the gory details, see: here, here and here.


Glossary:

  • bdist - "Built Distribution":
    A Distribution format containing files and metadata that only need to be moved to the correct location on the target system, to be installed. Wheel is such a format, whereas distutil’s Source Distribution is not, in that it requires a build step before it can be installed. (A "Binary Distribution" is also a bdist, but with additional compiled extensions.)

  • sdist - "Source Distribution":
    A distribution format (usually generated using python setup.py sdist) that provides metadata and the essential source files needed for installing by a tool like pip, or for generating a Built Distribution.

  • egg - [deprecated]:
    The older Built Distribution format introduced by setuptools, which is being replaced by wheel.

  • wheel - "":
    A Built Distribution format introduced by PEP-0427, which is intended to replace the "egg" format. A wheel (bdist_wheel) is a ZIP-format archive with a specially formatted file name and using the .whl extension. Normally, you need one wheel file for each operating system and architechture. And that list can get long for big projects, like numpy.


Recommeded or Similar Tools:

  • pip-check - Check you pip package update status with nice ANSI colored CLI
  • pip-chill - Lists only the dependencies (or not) of installed packages
  • pip_search - Victor's amazing pip search replacement
  • venvlink - Using virtual environments outside of the project folder, like a boss!

Bugs and Warnings

None

ToDo / Help Needed

See issues marked ToDo.

Contribution

Feel free to post issues and PR's related to this tool.
Feel free to fork, break, fix and contribute. Enjoy!

Additional Badges

build status codecov codecov


License

GitHub license
A license to 💖!

I use GPLv3 because sharing code modifications is more beneficial for the world.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].