rasbt
watermark
Python

An IPython magic extension for printing date and time stamps, version numbers, and hardware information

Last updated May 4, 2026
942
Stars
91
Forks
18
Issues
0
Stars/day
Attention Score
55
Language breakdown
No language data available.
β–Έ Files click to expand
README

Build status PyPI version Python 3 License

watermark

An IPython magic extension for printing date and time stamps, version numbers, and hardware information.

Sections

 

Examples

[top]

Using watermark in Jupyter notebooks and IPython sessions

 

More examples can be found in this Jupyter notebook.

Binder

 

Using watermark as a module

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.

 

Installation and updating

[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.

 

Usage

[top]

After successful installation, the watermark magic extension can be loaded via:

<pre><code class="lang-python">%load_ext watermark</code></pre>

<br>

To get an overview of all available commands, type:

<pre><code class="lang-python">%watermark?</code></pre>

<br>

<pre><code class="lang-raw">%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 GITHUBUSERNAME, --githubusername 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 &quot;Last updated: &quot; -c CUSTOMTIME, --customtime 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 --gpu prints GPU information (currently limited to NVIDIA GPUs), if available -je, --jupyter_env prints the current Jupyter environment (e.g., Colab, VS Code) --python_installation include information about how Python was installed --check_latest check if the latest packages are installed</code></pre>

&nbsp;

Development guidelines

[top]

In line with [NEP 29][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.
[nep-29]: https://numpy.org/neps/nep-0029-deprecation_policy.html

&nbsp;

Changelog

[top]

v. 2.6.0 (TBA)

  • Adds a new --checkjupyter flag to report on which notebook environment is used (e.g., Colab, Jupyter Notebook, Jupyter Lab, VSCode). (#102, via contribution by Mariam Zakaria)
  • Adds a new --checklatest flag to check whether newer package versions are available. (#102, via contribution by Mariam Zakaria)
  • Adds a new --pythoninstallation flag to provide information about how Python was installed. (#102, via contribution by Mariam Zakaria)
&nbsp;

v. 2.5.1 (Dec 14, 2025)

  • --iversion packages are now sorted alphabetically. (#102, via contribution by Vijay Lulla)
  • 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)
&nbsp;

v. 2.5.0 (Sep 20, 2024)

  • Can now capture imports retrospectively via -iv more reliably. (#94, via contribution by Martin Perier)
For example,

<pre><code class="lang-python">from sympy import solve</code></pre>

<pre><code class="lang-">%load_ext watermark</code></pre>

<pre><code class="lang-">%watermark -iv</code></pre>

Correctly prints sympy: 1.11.1

&nbsp;

v. 2.4.3 (May 23, 2023)

  • Make py3nvml installation for GPU info optional. (#92, via contribution by Ben Greiner)
&nbsp;

v. 2.4.1 and v 2.4.2 (May 23, 2023)

  • PyPI and Conda-Forge packaging fixes.
&nbsp;

v. 2.4.0 (May 23, 2023)

  • Adds a new --gpu flag to print out GPU information (currently limited to NVIDIA devices) (#90, via contribution by 907Resident)
&nbsp;

v. 2.3.1 (May 27, 2022)

  • 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/importlibmetadata#compatibility (#86, via contribution by James Myatt)

&nbsp;

v. 2.3.0 (January 3, 2022)

  • Added the following arguments: --githubusername - 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:

<pre><code class="lang-python">import numpy import watermark.watermark as watermark

watermark(iversions=True, globals_=globals())</code></pre>

&nbsp;

v. 2.2.0 (February 17, 2021)

  • Refactoring such that a watermark() function now also works outside IPython and Jupyter. Now, the magic %watermark calls watermark(). Calling %watermark via IPython and Juypter still works as usual. However, in addition the watermark() function can be used within regular Python for unit testing purposes etc. (#46, via contribution by Tymoteusz WoΕ‚odΕΊko)
&nbsp;

v. 2.1.0 (November 23, 2020)

  • Adopt [NEP 29][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 installrequires 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)
&nbsp;

v. 2.0.2 (November 19, 2019)

  • Support VERSION attributes, in addition to version attributes.
&nbsp;

v. 2.0.1 (October 04, 2019)

  • Fix 'sklearn' vs. 'scikit-learn' import compatibility.
&nbsp;

v. 2.0.0 (October 04, 2019)

  • Now uses pkg_resources as the default method for getting version numbers.
  • Fixes a whitespace bug when printing the timezone.
&nbsp;

v. 1.8.2 (July 28, 2019)

  • When no Python library was imported and the --iversion is used, print an empty string instead of raising an error.
&nbsp;

v. 1.8.1 (January 26, 2019)

  • Fixes string alignment issues when the -iv/--iversion flag is used.
&nbsp;

v. 1.8.0 (January 02, 2019)

  • The -iv/--iversion flag now also shows package versions that were imported as from X import Y
and import X.Y as Y. For example,

<pre><code class="lang-python">import scipy as sp from sklearn import metrics import numpy.linalg as linalg</code></pre>

<pre><code class="lang-">%watermark --iversions</code></pre>

will return

<pre><code class="lang-">scipy 1.1.0 sklearn 0.20.1 numpy 1.15.4</code></pre>

&nbsp;

v. 1.7.0 (October 13, 2018)

(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.
&nbsp;

v. 1.6.1 (June 10, 2018)

  • Now also includes the LICENSE file in the Python Wheels distribution
&nbsp;

v. 1.6.0 (January18, 2018)

  • Adds a new -b/--gitbranch parameter that prints the current Git branch.
&nbsp;

v. 1.5.0 (August 27, 2017)

  • 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)
&nbsp;

v. 1.4.0 (April 18, 2017)

  • Adds a new -r/ --gitrepo parameter that returns the URL of Git remote name "origin". (Via contribution by Lucy Park)
&nbsp;

v. 1.3.4 (October 15, 2016)

  • 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).
&nbsp;

v. 1.3.3 (September 1, 2016)

  • Includes LICENSE in MANIFEST.in for packaging
&nbsp;

v. 1.3.2 (August 16, 2016)

  • 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 print 2016-08-16T18:03:42
  • Adds offsets to UTC to the default date-time string for Python >= 3.2
&nbsp;

v. 1.3.1 (June 6, 2016)

  • Fixes an issue that caused problems importing watermark using Python 2.x
&nbsp;

v. 1.3.0 (May 21, 2016)

  • Removed the deprecated the %installext magic so that watermark can now be installed as a regular python package via pip (Via contribution by Peter Bull)
&nbsp;

v. 1.2.3 (January 29, 2016)

  • 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
&nbsp;

v. 1.2.2 (June 17, 2015)

  • 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.
&nbsp;

v. 1.2.1 (March 3, 2015)

  • Small bugfix to allow custom time string formatting.
&nbsp;

v. 1.2.0 (October 1, 2014)

  • --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.

Β© 2026 GitRepoTrend Β· rasbt/watermark Β· Updated daily from GitHub