An IPython magic extension for printing date and time stamps, version numbers, and hardware information.
[top]
More examples can be found in this Jupyter notebook.
from watermark import watermark
print(watermark())
Last updated: 2022-09-13T16:28:56.177487-05:00
Python implementation: CPython
Python version : 3.9.13
IPython version : 8.4.0
Compiler : Clang 13.0.1
OS : Darwin
Release : 21.6.0
Machine : arm64
Processor : arm
CPU cores : 10
Architecture: 64bit
print(watermark(packages="numpy,scipy"))
numpy: 1.23.2
scipy: 1.9.1
See help(watermark)
for more options.
[top]
The watermark line magic can be installed by executing
pip install watermark
Alternatively, you can install the latest development version directly from GitHub via
pip install -e git+https://github.com/rasbt/watermark#egg=watermark
Note:
To remove an old watermark
installation (installed via the deprecated %install_ext
magic extension), simply delete it from the .ipython/extensions/
directory, which is typically located in a user's home directory.
[top]
After successful installation, the watermark
magic extension can be loaded via:
%load_ext watermark
To get an overview of all available commands, type:
%watermark?
%watermark [-a AUTHOR] [-gu GITHUB_USERNAME] [-e EMAIL] [-ws WEBSITE]
[-d] [-n] [-t] [-i] [-z] [-u] [-c CUSTOM_TIME] [-v]
[-p PACKAGES] [-co] [-h] [-m] [-g] [-r] [-b] [-w] [-iv]
IPython magic function to print date/time stamps
and various system information.
optional arguments:
-a AUTHOR, --author AUTHOR
prints author name
-gu GITHUB_USERNAME, --github_username GITHUB_USERNAME
prints author github username
-e EMAIL, --email EMAIL
prints author email
-ws WEBSITE, --website WEBSITE
prints author or project website
-d, --date prints current date as YYYY-mm-dd
-n, --datename prints date with abbrv. day and month names
-t, --time prints current time as HH-MM-SS
-i, --iso8601 prints the combined date and time including the time
zone in the ISO 8601 standard with UTC offset
-z, --timezone appends the local time zone
-u, --updated appends a string "Last updated: "
-c CUSTOM_TIME, --custom_time CUSTOM_TIME
prints a valid strftime() string
-v, --python prints Python and IPython version
-p PACKAGES, --packages PACKAGES
prints versions of specified Python modules and
packages
-co, --conda prints name of current conda environment
-h, --hostname prints the host name
-m, --machine prints system and machine info
-g, --githash prints current Git commit hash
-r, --gitrepo prints current Git remote address
-b, --gitbranch prints current Git branch
-w, --watermark prints the current version of watermark
-iv, --iversions prints the name/version of all imported modules
[top]
In line with NEP 29, this project supports:
- All minor versions of Python released 42 months prior to the project, and at minimum the two latest minor versions.
[top]
- Extra args to allow printing
-d
(current date) and-t
(current time) information without needing to use the-u
(updated) flag. (#99, via contribution by Daniel Kleine)
- Can now capture imports retrospectively via
-iv
more reliably. (#94, via contribution by Martin Perier)
For example,
from sympy import solve
%load_ext watermark
%watermark -iv
Correctly prints sympy: 1.11.1
- Make
py3nvml
installation for GPU info optional. (#92, via contribution by Ben Greiner)
- PyPI and Conda-Forge packaging fixes.
- Adds a new
--gpu
flag to print out GPU information (currently limited to NVIDIA devices) (#90, via contribution by 907Resident)
- Upper limit on importlib-metadata caused trouble installing on Python 3.7. Instead pin to minimum version with Python 3.8 functionality according to https://github.com/python/importlib_metadata#compatibility (#86, via contribution by James Myatt)
- Added the following arguments:
--github_username
- for prints author github username,--email
- for prints author email,--website
- for prints author or project website. (#82, via contribution by joschkazj) - Added a
--conda
option to print the name of the current conda environment. (#79, via contribution by Alexander Krasnikov) - It is now possible to inject globals when used outside IPython (#80, via contribution by Hugo Lapré). For example, version numbers of imported packages can now be obtained as follows:
import numpy
import watermark.watermark as watermark
watermark(iversions=True, globals_=globals())
- Refactoring such that a
watermark()
function now also works outside IPython and Jupyter. Now, the magic%watermark
callswatermark()
. Calling%watermark
via IPython and Juypter still works as usual. However, in addition thewatermark()
function can be used within regular Python for unit testing purposes etc. (#46, via contribution by Tymoteusz Wołodźko)
- Adopt NEP 29 and require Python version 3.7 or newer. (#63, via contribution by James Myatt)
- Add Python 3.8 and 3.9 to Travis CI builds. (#63, via contribution by James Myatt)
- Fix: Allow setup.py to run without install_requires already installed (#67, via contribution by James Myatt)
- Major refactoring to improve code readability (#64 and 65, via contribution by Bahram Aghaei)
- Use importlib and importlib.metadata to determine package version numbers. (#66, via contribution by James Myatt)
- Support
VERSION
attributes, in addition to__version__
attributes.
- Fix
'sklearn'
vs.'scikit-learn'
import compatibility.
- Now uses
pkg_resources
as the default method for getting version numbers. - Fixes a whitespace bug when printing the timezone.
- When no Python library was imported and the
--iversion
is used, print an empty string instead of raising an error.
- Fixes string alignment issues when the
-iv
/--iversion
flag is used.
- The
-iv
/--iversion
flag now also shows package versions that were imported asfrom X import Y
andimport X.Y as Y
. For example,
import scipy as sp
from sklearn import metrics
import numpy.linalg as linalg
%watermark --iversions
will return
scipy 1.1.0
sklearn 0.20.1
numpy 1.15.4
(Via contribution by James Myatt)
- Shows "not installed" for version of packages/modules that cannot be imported.
- Shows "unknown" for version of packages/modules when version attribute cannot be found.
- Add Python 3.6 and 3.7 to Travis CI builds.
- Add classifiers to setuptools configuration.
- Now also includes the LICENSE file in the Python Wheels distribution
- Adds a new
-b
/--gitbranch
parameter that prints the current Git branch.
- Adds a new
-iv
/--iversions
parameter that prints the package names and version numbers of all packages that were previously imported in the current Python session. (Via contribution by Aziz Alto)
- Adds a new
-r
/--gitrepo
parameter that returns the URL of Git remote name "origin". (Via contribution by Lucy Park)
- Allow fetching scikit-learn's version number via
-p scikit-learn
in addition of-p sklearn
(the former is deprecated and will not be supported in watermark > 1.7).
- Includes LICENSE in MANIFEST.in for packaging
- Fixes an issue where the wrong package info was obtained when using the system level Jupyter within a virtualenv environment. (Via contribrution by Michael Bell)
- Adds a new
-i
/--iso8601
parameter that returns the current date-time string in ISO 8601 format with offset to UTC. For instance:2016-08-16T18:03:42-04:00
. Current caveat: Python < 3.2 requires external libraries for for computing the timezone offset, thus, Python < 3.2 will currently only print2016-08-16T18:03:42
- Adds offsets to UTC to the default date-time string for Python >= 3.2
- Fixes an issue that caused problems importing watermark using Python 2.x
- Removed the deprecated the %install_ext magic so that watermark can now be installed as a regular python package via
pip
(Via contribution by Peter Bull)
- Changed date format to the unambiguous ISO-8601 format
- Ditched the deprecated %install_ext function and made watermark a proper Python package
- Released the new version under a more permissive newBSD license
- Changed the default date-format of
-d
,--date
to MM/DD/YYYY, the format DD/MM/YYYY can be used via the shortcut-e
,--eurodate
.
- Small bugfix to allow custom time string formatting.
--watermark
command added to print the current version of watermark.- Print author name on a separate line
- Fixed bug that day takes the same value as the minute if the
-n
flag is used.