Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-watermark for
openSUSE:Factory checked in at 2026-01-28 15:12:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-watermark (Old)
and /work/SRC/openSUSE:Factory/.python-watermark.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-watermark"
Wed Jan 28 15:12:20 2026 rev:11 rq:1329546 version:2.6.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-watermark/python-watermark.changes
2024-11-21 15:15:21.237288813 +0100
+++
/work/SRC/openSUSE:Factory/.python-watermark.new.1928/python-watermark.changes
2026-01-28 15:15:11.874102351 +0100
@@ -1,0 +2,26 @@
+Tue Jan 27 17:21:40 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 2.6.0:
+ * Adds a new `--check_jupyter` flag to report which notebook
+ environment is used (e.g., Colab, Jupyter Notebook,
+ JupyterLab, VS Code).
+ * Adds a new `--check_latest` flag to check whether newer
+ package versions are available.
+ * Adds a new `--python_installation` flag to provide
+ information about how Python was installed.
+ * Feat check latest 87
+ * Feat: Add --filename (-fn) option to display notebook path.
+ Closes #25
+ * Fix KeyError in version lookup and implement fallback
+ * Fix timezone space 73
+ * Feat jupyter env 93
+ * Feat python install 89
+- update to 2.5.1:
+ * fixed typo
+ * Bump version to 2.5.1.dev
+ * Bump to 2.5.1.dev1 for build testing
+ * fixed -d and -t flags
+ * List imported packages in alphabetical order.
+ * Add auto deployment workflow
+
+-------------------------------------------------------------------
Old:
----
watermark-2.5.0.tar.gz
New:
----
watermark-2.6.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-watermark.spec ++++++
--- /var/tmp/diff_new_pack.ugnZRB/_old 2026-01-28 15:15:12.862143510 +0100
+++ /var/tmp/diff_new_pack.ugnZRB/_new 2026-01-28 15:15:12.866143677 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-watermark
#
-# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
Name: python-watermark
-Version: 2.5.0
+Version: 2.6.0
Release: 0
Summary: IPython magic function to psystem information
License: BSD-3-Clause
++++++ watermark-2.5.0.tar.gz -> watermark-2.6.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/watermark-2.5.0/PKG-INFO new/watermark-2.6.0/PKG-INFO
--- old/watermark-2.5.0/PKG-INFO 2024-09-21 02:39:21.355831100 +0200
+++ new/watermark-2.6.0/PKG-INFO 2025-12-22 00:41:53.881401300 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
Name: watermark
-Version: 2.5.0
+Version: 2.6.0
Summary: IPython magic function to print date/time stamps and various system
information.
Home-page: https://github.com/rasbt/watermark
Author: Sebastian Raschka
@@ -17,19 +17,419 @@
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Requires-Python: >=3.7
-Provides-Extra: gpu
+Description-Content-Type: text/markdown
License-File: LICENSE
+Requires-Dist: ipython>=6.0
+Requires-Dist: importlib-metadata>=1.4
+Requires-Dist: setuptools
+Provides-Extra: gpu
+Requires-Dist: py3nvml>=0.2; extra == "gpu"
+Dynamic: author
+Dynamic: author-email
+Dynamic: description
+Dynamic: description-content-type
+Dynamic: home-page
+Dynamic: license
+Dynamic: license-file
+Dynamic: provides-extra
+Dynamic: requires-dist
+Dynamic: summary
+
+[](https://ci.appveyor.com/project/rasbt/watermark)
+[](http://badge.fury.io/py/watermark)
+
+
+
+# watermark
+
+An IPython magic extension for printing date and time stamps, version numbers,
and hardware information.
+<br>
+
+#### Sections
+
+- [Examples](#examples)
+- [Installation and updating](#installation-and-updating)
+- [Usage](#usage)
+- [Development guidelines](#development-guidelines)
+- [Changelog](#changelog)
+
+
+## Examples
+
+[[top](#sections)]
+
+### Using watermark in Jupyter notebooks and IPython sessions
+
+
+
+<img src="docs/images/ex1.png" width=300>
+<img src="docs/images/ex2.png" width=200>
+
+
+
+**More examples can be found in this [Jupyter
notebook](docs/watermark.ipynb).**
+
+[](https://mybinder.org/v2/gh/rasbt/watermark/master?filepath=docs%2Fwatermark.ipynb)
+
+
+### Using watermark as a module
+
+
+```python
+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
+```
+
+```python
+print(watermark(packages="numpy,scipy"))
+```
+
+```
+numpy: 1.23.2
+scipy: 1.9.1
+```
+
+
+
+See `help(watermark)` for more options.
+
+
+
+## Installation and updating
+
+[[top](#sections)]
+
+The watermark line magic can be installed by executing
+
+```bash
+pip install watermark
+```
+
+Alternatively, you can install the latest development version directly from
GitHub via
+
+```bash
+pip install -e git+https://github.com/rasbt/watermark#egg=watermark
+```
+
+<br>
+
+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](#sections)]
+
+After successful installation, the `watermark` magic extension can be loaded
via:
+
+```python
+%load_ext watermark
+```
+
+<br>
+
+To get an overview of all available commands, type:
+
+```python
+%watermark?
+```
+
+<br>
+
+```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 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
+ --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
+```
+
+
+## Development guidelines
+
+[[top](#sections)]
+
+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
+
+
+## Changelog
+
+[[top](#sections)]
+
+#### v. 2.6.0 (TBA)
+
+- Adds a new `--check_jupyter` flag to report on which notebook environment is
used (e.g., Colab, Jupyter Notebook, Jupyter Lab, VSCode).
([#102](https://github.com/rasbt/watermark/pull/99), via contribution by
[Mariam Zakaria](https://github.com/mariam851))
+- Adds a new `--check_latest` flag to check whether newer package versions are
available. ([#102](https://github.com/rasbt/watermark/pull/99), via
contribution by [Mariam Zakaria](https://github.com/mariam851))
+- Adds a new `--python_installation` flag to provide information about how
Python was installed. ([#102](https://github.com/rasbt/watermark/pull/99), via
contribution by [Mariam Zakaria](https://github.com/mariam851))
+
+
+#### v. 2.5.1 (Dec 14, 2025)
+
+- `--iversion` packages are now sorted alphabetically.
([#102](https://github.com/rasbt/watermark/pull/99), via contribution by [Vijay
Lulla](https://github.com/vlulla))
+- Extra args to allow printing `-d` (current date) and `-t` (current time)
information without needing to use the `-u` (updated) flag.
([#99](https://github.com/rasbt/watermark/pull/99), via contribution by [Daniel
Kleine](https://github.com/d-kleine))
+
+
+#### v. 2.5.0 (Sep 20, 2024)
+
+- Can now capture imports retrospectively via `-iv` more reliably.
([#94](https://github.com/rasbt/watermark/pull/94), via contribution by [Martin
Perier](https://github.com/martinp7))
+
+ For example,
+
+```python
+from sympy import solve
+```
+
+```
+%load_ext watermark
+```
+
+```
+%watermark -iv
+```
+
+Correctly prints `sympy: 1.11.1`
+
+
+
+
+#### v. 2.4.3 (May 23, 2023)
+
+- Make `py3nvml` installation for GPU info optional.
([#92](https://github.com/rasbt/watermark/pull/92), via contribution by [Ben
Greiner](https://github.com/bnavigator))
+
+
+#### v. 2.4.1 and v 2.4.2 (May 23, 2023)
+
+- PyPI and Conda-Forge packaging fixes.
+
+
+#### v. 2.4.0 (May 23, 2023)
+
+- Adds a new `--gpu` flag to print out GPU information (currently limited to
NVIDIA devices) ([#90](https://github.com/rasbt/watermark/pull/90), via
contribution by [907Resident](https://github.com/907Resident))
+
+
+#### 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/importlib_metadata#compatibility
([#86](https://github.com/rasbt/watermark/pull/86), via contribution by [James
Myatt](https://github.com/jamesmyatt))
+
+
+#### v. 2.3.0 (January 3, 2022)
+
+- Added the following arguments: `--github_username` - for prints author
github username, `--email` - for prints author email, `--website` - for prints
author or project website. ([#82](https://github.com/rasbt/watermark/pull/82),
via contribution by [joschkazj](https://github.com/joschkazj))
+- Added a `--conda` option to print the name of the current conda environment.
([#79](https://github.com/rasbt/watermark/pull/79), via contribution by
[Alexander Krasnikov](https://github.com/askras))
+- It is now possible to inject globals when used outside IPython
([#80](https://github.com/rasbt/watermark/pull/80), via contribution by [
+Hugo Lapré](https://github.com/Hugovdberg)). For example, version numbers of
imported packages can now be obtained as follows:
+
+```python
+import numpy
+import watermark.watermark as watermark
+
+
+watermark(iversions=True, globals_=globals())
+```
+
+
+#### 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](https://github.com/rasbt/watermark/pull/46), via
contribution by [Tymoteusz Wołodźko](https://github.com/twolodzko))
+
+
+#### v. 2.1.0 (November 23, 2020)
+
+- Adopt [NEP 29][nep-29] and require Python version 3.7 or newer.
([#63](https://github.com/rasbt/watermark/pull/63), via contribution by [James
Myatt](https://github.com/jamesmyatt))
+- Add Python 3.8 and 3.9 to Travis CI builds.
([#63](https://github.com/rasbt/watermark/pull/63), via contribution by [James
Myatt](https://github.com/jamesmyatt))
+- Fix: Allow setup.py to run without install_requires already installed
([#67](https://github.com/rasbt/watermark/pull/67), via contribution by [James
Myatt](https://github.com/jamesmyatt))
+- Major refactoring to improve code readability
([#64](https://github.com/rasbt/watermark/pull/64) and
[65](https://github.com/rasbt/watermark/pull/65), via contribution by [Bahram
Aghaei](https://github.com/GreatBahram))
+- Use importlib and importlib.metadata to determine package version numbers.
([#66](https://github.com/rasbt/watermark/pull/66), via contribution by [James
Myatt](https://github.com/jamesmyatt))
+
+
+#### v. 2.0.2 (November 19, 2019)
+
+- Support `VERSION` attributes, in addition to `__version__` attributes.
+
+
+#### v. 2.0.1 (October 04, 2019)
+
+- Fix `'sklearn'` vs. `'scikit-learn'` import compatibility.
+
+
+#### 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.
+
+
+#### 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.
+
+
+#### v. 1.8.1 (January 26, 2019)
+
+- Fixes string alignment issues when the `-iv`/`--iversion` flag is used.
+
+
+#### 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,
+
+```python
+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
+```
+
+
+#### v. 1.7.0 (October 13, 2018)
+
+(Via contribution by [James Myatt](https://github.com/jamesmyatt))
+
+- 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.
+
+
+#### v. 1.6.1 (June 10, 2018)
+
+- Now also includes the LICENSE file in the Python Wheels distribution
+
+
+#### v. 1.6.0 (January18, 2018)
+
+- Adds a new `-b`/`--gitbranch` parameter that prints the current Git branch.
+
+
+#### 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](https://github.com/iamaziz))
+
+
+#### 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](https://github.com/e9t))
+
+
+#### 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).
+
+
+#### v. 1.3.3 (September 1, 2016)
+
+- Includes LICENSE in MANIFEST.in for packaging
+
+
+#### 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](https://github.com/mrbell))
+- 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
+
+
+#### v. 1.3.1 (June 6, 2016)
+
+- Fixes an issue that caused problems importing watermark using Python 2.x
+
+
+#### v. 1.3.0 (May 21, 2016)
+
+- 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](https://github.com/pjbull))
+
+
+#### 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](./LICENSE)
+
+
+#### 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`.
-An IPython magic extension for printing date and time stamps, version
-numbers, and hardware information.
+
+#### v. 1.2.1 (March 3, 2015)
-Contact
-=============
-If you have any questions or comments about watermark,
-please feel free to contact me via
-email: [email protected]
+- Small bugfix to allow custom time string formatting.
-This project is hosted at https://github.com/rasbt/watermark
+
+#### v. 1.2.0 (October 1, 2014)
-The documentation can be found at
-https://github.com/rasbt/watermark/blob/master/README.md
+- `--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.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/watermark-2.5.0/README.md
new/watermark-2.6.0/README.md
--- old/watermark-2.5.0/README.md 2024-09-21 02:37:16.000000000 +0200
+++ new/watermark-2.6.0/README.md 2025-12-22 00:38:41.000000000 +0100
@@ -16,8 +16,7 @@
- [Development guidelines](#development-guidelines)
- [Changelog](#changelog)
-<br>
-
+
## Examples
[[top](#sections)]
@@ -26,16 +25,16 @@
-<img src="docs/images/ex1.png" width=700>
-<img src="docs/images/ex2.png" width=700>
+<img src="docs/images/ex1.png" width=300>
+<img src="docs/images/ex2.png" width=200>
+
+
**More examples can be found in this [Jupyter
notebook](docs/watermark.ipynb).**
[](https://mybinder.org/v2/gh/rasbt/watermark/master?filepath=docs%2Fwatermark.ipynb)
-<br>
-
-
+
### Using watermark as a module
@@ -74,7 +73,7 @@
See `help(watermark)` for more options.
-
+
## Installation and updating
[[top](#sections)]
@@ -97,6 +96,7 @@
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](#sections)]
@@ -155,10 +155,16 @@
-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
```
-<br>
-
+
## Development guidelines
[[top](#sections)]
@@ -169,12 +175,24 @@
[nep-29]: https://numpy.org/neps/nep-0029-deprecation_policy.html
-<br>
-
+
## Changelog
[[top](#sections)]
+#### v. 2.6.0 (TBA)
+
+- Adds a new `--check_jupyter` flag to report on which notebook environment is
used (e.g., Colab, Jupyter Notebook, Jupyter Lab, VSCode).
([#102](https://github.com/rasbt/watermark/pull/99), via contribution by
[Mariam Zakaria](https://github.com/mariam851))
+- Adds a new `--check_latest` flag to check whether newer package versions are
available. ([#102](https://github.com/rasbt/watermark/pull/99), via
contribution by [Mariam Zakaria](https://github.com/mariam851))
+- Adds a new `--python_installation` flag to provide information about how
Python was installed. ([#102](https://github.com/rasbt/watermark/pull/99), via
contribution by [Mariam Zakaria](https://github.com/mariam851))
+
+
+#### v. 2.5.1 (Dec 14, 2025)
+
+- `--iversion` packages are now sorted alphabetically.
([#102](https://github.com/rasbt/watermark/pull/99), via contribution by [Vijay
Lulla](https://github.com/vlulla))
+- Extra args to allow printing `-d` (current date) and `-t` (current time)
information without needing to use the `-u` (updated) flag.
([#99](https://github.com/rasbt/watermark/pull/99), via contribution by [Daniel
Kleine](https://github.com/d-kleine))
+
+
#### v. 2.5.0 (Sep 20, 2024)
- Can now capture imports retrospectively via `-iv` more reliably.
([#94](https://github.com/rasbt/watermark/pull/94), via contribution by [Martin
Perier](https://github.com/martinp7))
@@ -197,25 +215,28 @@
-
+
#### v. 2.4.3 (May 23, 2023)
- Make `py3nvml` installation for GPU info optional.
([#92](https://github.com/rasbt/watermark/pull/92), via contribution by [Ben
Greiner](https://github.com/bnavigator))
+
#### v. 2.4.1 and v 2.4.2 (May 23, 2023)
- PyPI and Conda-Forge packaging fixes.
+
#### v. 2.4.0 (May 23, 2023)
- Adds a new `--gpu` flag to print out GPU information (currently limited to
NVIDIA devices) ([#90](https://github.com/rasbt/watermark/pull/90), via
contribution by [907Resident](https://github.com/907Resident))
-
+
#### 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/importlib_metadata#compatibility
([#86](https://github.com/rasbt/watermark/pull/86), via contribution by [James
Myatt](https://github.com/jamesmyatt))
+
#### v. 2.3.0 (January 3, 2022)
- Added the following arguments: `--github_username` - for prints author
github username, `--email` - for prints author email, `--website` - for prints
author or project website. ([#82](https://github.com/rasbt/watermark/pull/82),
via contribution by [joschkazj](https://github.com/joschkazj))
@@ -231,10 +252,12 @@
watermark(iversions=True, globals_=globals())
```
+
#### 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](https://github.com/rasbt/watermark/pull/46), via
contribution by [Tymoteusz Wołodźko](https://github.com/twolodzko))
+
#### v. 2.1.0 (November 23, 2020)
- Adopt [NEP 29][nep-29] and require Python version 3.7 or newer.
([#63](https://github.com/rasbt/watermark/pull/63), via contribution by [James
Myatt](https://github.com/jamesmyatt))
@@ -243,27 +266,33 @@
- Major refactoring to improve code readability
([#64](https://github.com/rasbt/watermark/pull/64) and
[65](https://github.com/rasbt/watermark/pull/65), via contribution by [Bahram
Aghaei](https://github.com/GreatBahram))
- Use importlib and importlib.metadata to determine package version numbers.
([#66](https://github.com/rasbt/watermark/pull/66), via contribution by [James
Myatt](https://github.com/jamesmyatt))
+
#### v. 2.0.2 (November 19, 2019)
- Support `VERSION` attributes, in addition to `__version__` attributes.
+
#### v. 2.0.1 (October 04, 2019)
- Fix `'sklearn'` vs. `'scikit-learn'` import compatibility.
+
#### 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.
+
#### 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.
+
#### v. 1.8.1 (January 26, 2019)
- Fixes string alignment issues when the `-iv`/`--iversion` flag is used.
+
#### v. 1.8.0 (January 02, 2019)
- The `-iv`/`--iversion` flag now also shows package versions that were
imported as `from X import Y`
@@ -287,6 +316,7 @@
numpy 1.15.4
```
+
#### v. 1.7.0 (October 13, 2018)
(Via contribution by [James Myatt](https://github.com/jamesmyatt))
@@ -296,58 +326,71 @@
- Add Python 3.6 and 3.7 to Travis CI builds.
- Add classifiers to setuptools configuration.
+
#### v. 1.6.1 (June 10, 2018)
- Now also includes the LICENSE file in the Python Wheels distribution
-#### v. 1.6.0 (Jan uary18, 2018)
+
+#### v. 1.6.0 (January18, 2018)
- Adds a new `-b`/`--gitbranch` parameter that prints the current Git branch.
+
#### 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](https://github.com/iamaziz))
+
#### 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](https://github.com/e9t))
+
#### 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).
+
#### v. 1.3.3 (September 1, 2016)
- Includes LICENSE in MANIFEST.in for packaging
+
#### 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](https://github.com/mrbell))
- 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
+
#### v. 1.3.1 (June 6, 2016)
- Fixes an issue that caused problems importing watermark using Python 2.x
+
#### v. 1.3.0 (May 21, 2016)
- 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](https://github.com/pjbull))
+
#### 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](./LICENSE)
+
#### 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`.
+
#### v. 1.2.1 (March 3, 2015)
- Small bugfix to allow custom time string formatting.
+
#### v. 1.2.0 (October 1, 2014)
- `--watermark` command added to print the current version of watermark.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/watermark-2.5.0/setup.cfg
new/watermark-2.6.0/setup.cfg
--- old/watermark-2.5.0/setup.cfg 2024-09-21 02:39:21.356100300 +0200
+++ new/watermark-2.6.0/setup.cfg 2025-12-22 00:41:53.881722000 +0100
@@ -1,5 +1,5 @@
[metadata]
-version = 2.5.0
+version = 2.6.0
license_file = LICENSE
classifiers =
Development Status :: 5 - Production/Stable
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/watermark-2.5.0/setup.py new/watermark-2.6.0/setup.py
--- old/watermark-2.5.0/setup.py 2024-09-21 02:17:42.000000000 +0200
+++ new/watermark-2.6.0/setup.py 2025-12-22 00:40:22.000000000 +0100
@@ -1,4 +1,4 @@
-# Sebastian Raschka 2014-2022
+# Sebastian Raschka 2014-2025
# IPython magic function to print date/time stamps and
# various system information.
# Author: Sebastian Raschka <sebastianraschka.com>
@@ -6,19 +6,21 @@
# License: BSD 3 clause
from os.path import dirname, join, realpath
-from textwrap import dedent
-
from setuptools import find_packages, setup
PROJECT_ROOT = dirname(realpath(__file__))
REQUIREMENTS_FILE = join(PROJECT_ROOT, "requirements.txt")
+README_FILE = join(PROJECT_ROOT, "README.md")
-with open(REQUIREMENTS_FILE) as f:
+with open(REQUIREMENTS_FILE, encoding="utf-8") as f:
install_reqs = f.read().splitlines()
install_reqs.append("setuptools")
+with open(README_FILE, encoding="utf-8") as f:
+ long_description = f.read()
+
# Also see settings in setup.cfg
setup(
name="watermark",
@@ -33,20 +35,6 @@
packages=find_packages(exclude=[]),
install_requires=install_reqs,
extras_require={'gpu': ['py3nvml>=0.2']},
- long_description=dedent(
- """\
- An IPython magic extension for printing date and time stamps, version
- numbers, and hardware information.
-
- Contact
- =============
- If you have any questions or comments about watermark,
- please feel free to contact me via
- email: [email protected]
-
- This project is hosted at https://github.com/rasbt/watermark
-
- The documentation can be found at
- https://github.com/rasbt/watermark/blob/master/README.md"""
- ),
+ long_description=long_description,
+ long_description_content_type="text/markdown",
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/watermark-2.5.0/watermark/magic.py
new/watermark-2.6.0/watermark/magic.py
--- old/watermark-2.5.0/watermark/magic.py 2024-09-21 02:17:42.000000000
+0200
+++ new/watermark-2.6.0/watermark/magic.py 2025-12-22 00:38:41.000000000
+0100
@@ -73,6 +73,12 @@
@argument('--gpu', action='store_true',
help='prints GPU information (currently limited to NVIDIA GPUs),'
' if available')
+ @argument('-je', '--jupyter_env', action='store_true',
+ help='prints the current Jupyter environment (e.g., Colab, VS
Code)')
+ @argument('--python_installation', action='store_true',
+ help='include information about how Python was installed')
+ @argument('--check_latest', action='store_true',
+ help='check if the latest packages are installed')
@line_magic
def watermark(self, line):
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/watermark-2.5.0/watermark/watermark.py
new/watermark-2.6.0/watermark/watermark.py
--- old/watermark-2.5.0/watermark/watermark.py 2024-09-21 02:25:52.000000000
+0200
+++ new/watermark-2.6.0/watermark/watermark.py 2025-12-22 00:38:41.000000000
+0100
@@ -10,7 +10,6 @@
from __future__ import absolute_import
import datetime
-import importlib
import inspect
import os
import platform
@@ -60,6 +59,9 @@
watermark=False,
iversions=False,
gpu=False,
+ jupyter_env=False,
+ python_installation=False,
+ check_latest=False,
watermark_self=None,
globals_=None
):
@@ -172,21 +174,32 @@
value = iso_dt
else:
values = []
- if args['current_date']:
- values.append(time.strftime("%Y-%m-%d"))
- elif args['datename']:
- values.append(time.strftime("%a %b %d %Y"))
+ if args['current_date'] or args['datename']:
+ if args['datename']:
+ values.append(time.strftime("%a, %d %b %Y"))
+ else:
+ values.append(time.strftime("%Y-%m-%d"))
if args['current_time']:
time_str = time.strftime("%H:%M:%S")
if args['timezone']:
- time_str += time.strftime("%Z")
+ time_str += " " + time.strftime("%Z")
values.append(time_str)
value = " ".join(values)
output.append({"Last updated": value})
+ elif args['current_date'] or args['current_time']:
+ if args['current_date'] and args['current_time']:
+ date_str = time.strftime("%Y-%m-%d")
+ time_str = time.strftime("%H:%M:%S")
+ output.append({"Date/Time": f"{date_str} {time_str}"})
+ elif args['current_date']:
+ output.append({"Date": time.strftime("%Y-%m-%d")})
+ elif args['current_time']:
+ output.append({"Time": time.strftime("%H:%M:%S")})
if args['python']:
output.append(_get_pyversions())
if args['packages']:
- output.append(_get_packages(args['packages']))
+ check_latest = args.get('check_latest', False)
+ output.append(_get_packages(args['packages'], check_latest))
if args['conda']:
output.append(_get_conda_env())
if args['machine']:
@@ -212,6 +225,10 @@
output.append(_get_all_import_versions(ns))
if args['gpu']:
output.append(_get_gpu_info())
+ if args['python_installation']:
+ output.append({"Python installation": _get_python_installation()})
+ if args['jupyter_env']:
+ output.append({"Jupyter enviroment": _get_jupyter_env()})
if args['watermark']:
output.append({"Watermark": __version__})
@@ -239,35 +256,31 @@
return iso_dt
-def _get_packages(pkgs):
+def _get_packages(pkgs, check_latest=False):
packages = pkgs.split(",")
- return {package: _get_package_version(package)
+ return {package: _get_package_version(package, check_latest)
for package in packages}
-def _get_package_version(pkg_name):
- """Return the version of a given package"""
- if pkg_name == "scikit-learn":
- pkg_name = "sklearn"
+def _get_package_version(pkg_name, check_latest=False):
+ """Internal helper to get the version of a package."""
+ current_version = 'unknown'
try:
- imported = importlib.import_module(pkg_name)
- except ImportError:
- version = "not installed"
- else:
+ current_version = importlib_metadata.version(pkg_name)
+ except (importlib_metadata.PackageNotFoundError, KeyError):
try:
- version = importlib_metadata.version(pkg_name)
- except importlib_metadata.PackageNotFoundError:
- try:
- version = imported.__version__
- except AttributeError:
- try:
- version = imported.version
- except AttributeError:
- try:
- version = imported.version_info
- except AttributeError:
- version = "unknown"
- return version
+ import importlib
+ temp_mod = importlib.import_module(pkg_name)
+ current_version = getattr(temp_mod, '__version__', 'unknown')
+ except Exception:
+ current_version = 'unknown'
+
+ if check_latest and current_version != 'unknown':
+ latest_version = _get_latest_version(pkg_name)
+ if latest_version and latest_version != current_version:
+ return f"{current_version} (version {latest_version} is available)"
+
+ return current_version
def _get_pyversions():
@@ -337,7 +350,7 @@
imported_pkgs = {module.__name__.split(".")[0] for module in
imported_modules}
imported_pkgs.discard("builtins")
- for pkg_name in imported_pkgs:
+ for pkg_name in sorted(imported_pkgs):
pkg_version = _get_package_version(pkg_name)
if pkg_version not in ("not installed", "unknown"):
to_print[pkg_name] = pkg_version
@@ -352,7 +365,7 @@
def _get_gpu_info():
if py3nvml is None:
return {"GPU Info": 'Install the gpu extra '
- '(pip install "watermark[gpu])") '
+ '(pip install "watermark[gpu]") '
'to display GPU information for NVIDIA chipsets'}
try:
gpu_info = [""]
@@ -371,3 +384,91 @@
except:
return {"GPU Info": "GPU information is not "
"available for this machine."}
+
+
+def _get_jupyter_env():
+ """Internal helper to detect the current Jupyter environment."""
+ import os
+ import importlib.util
+
+ if 'COLAB_RELEASE_TAG' in os.environ:
+ return "Google Colab"
+
+ if 'VSCODE_PID' in os.environ or 'VSCODE_CWD' in os.environ:
+ return "VS Code (Notebook)"
+
+ if 'KAGGLE_KERNEL_RUN_TYPE' in os.environ:
+ return "Kaggle Notebook"
+
+ def _is_jupyterlab():
+ lab_env_vars = (
+ 'JUPYTERLAB_DIR',
+ 'JUPYTERLAB_SETTINGS_DIR',
+ 'JUPYTERLAB_WORKSPACES_DIR',
+ 'JUPYTERLAB_APP_DIR',
+ )
+ if any(os.environ.get(var) for var in lab_env_vars):
+ return True
+
+ parent_app = os.environ.get('JPY_PARENT_APP', '')
+ parent_lower = parent_app.lower()
+ if 'jupyterlab' in parent_lower or 'jupyter-lab' in parent_lower:
+ return True
+ if parent_app and any(token in parent_lower for token in ('notebook',
'nbclassic')):
+ return False
+
+ return importlib.util.find_spec('jupyterlab') is not None
+
+ try:
+ shell = get_ipython().__class__.__name__
+ if shell == 'ZMQInteractiveShell':
+ if _is_jupyterlab():
+ return "JupyterLab"
+ return "Jupyter Notebook (Classic)"
+ elif shell == 'TerminalInteractiveShell':
+ return "IPython Terminal"
+ except NameError:
+ return "Standard Python Interpreter"
+
+ return "Unknown / Classic Jupyter"
+
+
+def _get_python_installation():
+ """Internal helper to detect how Python was installed (Issue #89)."""
+ import sys
+ import os
+
+ exe_path = sys.executable.lower()
+
+ if 'conda' in exe_path or 'anaconda' in exe_path or 'miniconda' in
exe_path:
+ return "Conda"
+
+ if hasattr(sys, 'real_prefix') or (hasattr(sys, 'base_prefix') and
sys.base_prefix != sys.prefix):
+ return "Virtual Environment (venv/virtualenv)"
+
+ if '.pyenv' in exe_path:
+ return "pyenv"
+
+ if 'windowsapps' in exe_path or 'microsoft\\windowsapps' in exe_path:
+ return "Windows Store"
+
+ if 'homebrew' in exe_path or '/usr/local/cellar/' in exe_path:
+ return "Homebrew"
+
+ if os.path.exists('/.dockerenv'):
+ return "Docker container"
+
+ return "System/Official"
+
+
+def _get_latest_version(package_name):
+ """Fetch the latest version of a package from PyPI."""
+ import urllib.request
+ import json
+ try:
+ url = f"https://pypi.org/pypi/{package_name}/json"
+ with urllib.request.urlopen(url, timeout=2) as response:
+ data = json.loads(response.read().decode())
+ return data['info']['version']
+ except Exception:
+ return None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/watermark-2.5.0/watermark.egg-info/PKG-INFO
new/watermark-2.6.0/watermark.egg-info/PKG-INFO
--- old/watermark-2.5.0/watermark.egg-info/PKG-INFO 2024-09-21
02:39:21.000000000 +0200
+++ new/watermark-2.6.0/watermark.egg-info/PKG-INFO 2025-12-22
00:41:53.000000000 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
Name: watermark
-Version: 2.5.0
+Version: 2.6.0
Summary: IPython magic function to print date/time stamps and various system
information.
Home-page: https://github.com/rasbt/watermark
Author: Sebastian Raschka
@@ -17,19 +17,419 @@
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Requires-Python: >=3.7
-Provides-Extra: gpu
+Description-Content-Type: text/markdown
License-File: LICENSE
+Requires-Dist: ipython>=6.0
+Requires-Dist: importlib-metadata>=1.4
+Requires-Dist: setuptools
+Provides-Extra: gpu
+Requires-Dist: py3nvml>=0.2; extra == "gpu"
+Dynamic: author
+Dynamic: author-email
+Dynamic: description
+Dynamic: description-content-type
+Dynamic: home-page
+Dynamic: license
+Dynamic: license-file
+Dynamic: provides-extra
+Dynamic: requires-dist
+Dynamic: summary
+
+[](https://ci.appveyor.com/project/rasbt/watermark)
+[](http://badge.fury.io/py/watermark)
+
+
+
+# watermark
+
+An IPython magic extension for printing date and time stamps, version numbers,
and hardware information.
+<br>
+
+#### Sections
+
+- [Examples](#examples)
+- [Installation and updating](#installation-and-updating)
+- [Usage](#usage)
+- [Development guidelines](#development-guidelines)
+- [Changelog](#changelog)
+
+
+## Examples
+
+[[top](#sections)]
+
+### Using watermark in Jupyter notebooks and IPython sessions
+
+
+
+<img src="docs/images/ex1.png" width=300>
+<img src="docs/images/ex2.png" width=200>
+
+
+
+**More examples can be found in this [Jupyter
notebook](docs/watermark.ipynb).**
+
+[](https://mybinder.org/v2/gh/rasbt/watermark/master?filepath=docs%2Fwatermark.ipynb)
+
+
+### Using watermark as a module
+
+
+```python
+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
+```
+
+```python
+print(watermark(packages="numpy,scipy"))
+```
+
+```
+numpy: 1.23.2
+scipy: 1.9.1
+```
+
+
+
+See `help(watermark)` for more options.
+
+
+
+## Installation and updating
+
+[[top](#sections)]
+
+The watermark line magic can be installed by executing
+
+```bash
+pip install watermark
+```
+
+Alternatively, you can install the latest development version directly from
GitHub via
+
+```bash
+pip install -e git+https://github.com/rasbt/watermark#egg=watermark
+```
+
+<br>
+
+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](#sections)]
+
+After successful installation, the `watermark` magic extension can be loaded
via:
+
+```python
+%load_ext watermark
+```
+
+<br>
+
+To get an overview of all available commands, type:
+
+```python
+%watermark?
+```
+
+<br>
+
+```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 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
+ --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
+```
+
+
+## Development guidelines
+
+[[top](#sections)]
+
+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
+
+
+## Changelog
+
+[[top](#sections)]
+
+#### v. 2.6.0 (TBA)
+
+- Adds a new `--check_jupyter` flag to report on which notebook environment is
used (e.g., Colab, Jupyter Notebook, Jupyter Lab, VSCode).
([#102](https://github.com/rasbt/watermark/pull/99), via contribution by
[Mariam Zakaria](https://github.com/mariam851))
+- Adds a new `--check_latest` flag to check whether newer package versions are
available. ([#102](https://github.com/rasbt/watermark/pull/99), via
contribution by [Mariam Zakaria](https://github.com/mariam851))
+- Adds a new `--python_installation` flag to provide information about how
Python was installed. ([#102](https://github.com/rasbt/watermark/pull/99), via
contribution by [Mariam Zakaria](https://github.com/mariam851))
+
+
+#### v. 2.5.1 (Dec 14, 2025)
+
+- `--iversion` packages are now sorted alphabetically.
([#102](https://github.com/rasbt/watermark/pull/99), via contribution by [Vijay
Lulla](https://github.com/vlulla))
+- Extra args to allow printing `-d` (current date) and `-t` (current time)
information without needing to use the `-u` (updated) flag.
([#99](https://github.com/rasbt/watermark/pull/99), via contribution by [Daniel
Kleine](https://github.com/d-kleine))
+
+
+#### v. 2.5.0 (Sep 20, 2024)
+
+- Can now capture imports retrospectively via `-iv` more reliably.
([#94](https://github.com/rasbt/watermark/pull/94), via contribution by [Martin
Perier](https://github.com/martinp7))
+
+ For example,
+
+```python
+from sympy import solve
+```
+
+```
+%load_ext watermark
+```
+
+```
+%watermark -iv
+```
+
+Correctly prints `sympy: 1.11.1`
+
+
+
+
+#### v. 2.4.3 (May 23, 2023)
+
+- Make `py3nvml` installation for GPU info optional.
([#92](https://github.com/rasbt/watermark/pull/92), via contribution by [Ben
Greiner](https://github.com/bnavigator))
+
+
+#### v. 2.4.1 and v 2.4.2 (May 23, 2023)
+
+- PyPI and Conda-Forge packaging fixes.
+
+
+#### v. 2.4.0 (May 23, 2023)
+
+- Adds a new `--gpu` flag to print out GPU information (currently limited to
NVIDIA devices) ([#90](https://github.com/rasbt/watermark/pull/90), via
contribution by [907Resident](https://github.com/907Resident))
+
+
+#### 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/importlib_metadata#compatibility
([#86](https://github.com/rasbt/watermark/pull/86), via contribution by [James
Myatt](https://github.com/jamesmyatt))
+
+
+#### v. 2.3.0 (January 3, 2022)
+
+- Added the following arguments: `--github_username` - for prints author
github username, `--email` - for prints author email, `--website` - for prints
author or project website. ([#82](https://github.com/rasbt/watermark/pull/82),
via contribution by [joschkazj](https://github.com/joschkazj))
+- Added a `--conda` option to print the name of the current conda environment.
([#79](https://github.com/rasbt/watermark/pull/79), via contribution by
[Alexander Krasnikov](https://github.com/askras))
+- It is now possible to inject globals when used outside IPython
([#80](https://github.com/rasbt/watermark/pull/80), via contribution by [
+Hugo Lapré](https://github.com/Hugovdberg)). For example, version numbers of
imported packages can now be obtained as follows:
+
+```python
+import numpy
+import watermark.watermark as watermark
+
+
+watermark(iversions=True, globals_=globals())
+```
+
+
+#### 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](https://github.com/rasbt/watermark/pull/46), via
contribution by [Tymoteusz Wołodźko](https://github.com/twolodzko))
+
+
+#### v. 2.1.0 (November 23, 2020)
+
+- Adopt [NEP 29][nep-29] and require Python version 3.7 or newer.
([#63](https://github.com/rasbt/watermark/pull/63), via contribution by [James
Myatt](https://github.com/jamesmyatt))
+- Add Python 3.8 and 3.9 to Travis CI builds.
([#63](https://github.com/rasbt/watermark/pull/63), via contribution by [James
Myatt](https://github.com/jamesmyatt))
+- Fix: Allow setup.py to run without install_requires already installed
([#67](https://github.com/rasbt/watermark/pull/67), via contribution by [James
Myatt](https://github.com/jamesmyatt))
+- Major refactoring to improve code readability
([#64](https://github.com/rasbt/watermark/pull/64) and
[65](https://github.com/rasbt/watermark/pull/65), via contribution by [Bahram
Aghaei](https://github.com/GreatBahram))
+- Use importlib and importlib.metadata to determine package version numbers.
([#66](https://github.com/rasbt/watermark/pull/66), via contribution by [James
Myatt](https://github.com/jamesmyatt))
+
+
+#### v. 2.0.2 (November 19, 2019)
+
+- Support `VERSION` attributes, in addition to `__version__` attributes.
+
+
+#### v. 2.0.1 (October 04, 2019)
+
+- Fix `'sklearn'` vs. `'scikit-learn'` import compatibility.
+
+
+#### 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.
+
+
+#### 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.
+
+
+#### v. 1.8.1 (January 26, 2019)
+
+- Fixes string alignment issues when the `-iv`/`--iversion` flag is used.
+
+
+#### 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,
+
+```python
+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
+```
+
+
+#### v. 1.7.0 (October 13, 2018)
+
+(Via contribution by [James Myatt](https://github.com/jamesmyatt))
+
+- 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.
+
+
+#### v. 1.6.1 (June 10, 2018)
+
+- Now also includes the LICENSE file in the Python Wheels distribution
+
+
+#### v. 1.6.0 (January18, 2018)
+
+- Adds a new `-b`/`--gitbranch` parameter that prints the current Git branch.
+
+
+#### 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](https://github.com/iamaziz))
+
+
+#### 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](https://github.com/e9t))
+
+
+#### 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).
+
+
+#### v. 1.3.3 (September 1, 2016)
+
+- Includes LICENSE in MANIFEST.in for packaging
+
+
+#### 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](https://github.com/mrbell))
+- 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
+
+
+#### v. 1.3.1 (June 6, 2016)
+
+- Fixes an issue that caused problems importing watermark using Python 2.x
+
+
+#### v. 1.3.0 (May 21, 2016)
+
+- 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](https://github.com/pjbull))
+
+
+#### 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](./LICENSE)
+
+
+#### 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`.
-An IPython magic extension for printing date and time stamps, version
-numbers, and hardware information.
+
+#### v. 1.2.1 (March 3, 2015)
-Contact
-=============
-If you have any questions or comments about watermark,
-please feel free to contact me via
-email: [email protected]
+- Small bugfix to allow custom time string formatting.
-This project is hosted at https://github.com/rasbt/watermark
+
+#### v. 1.2.0 (October 1, 2014)
-The documentation can be found at
-https://github.com/rasbt/watermark/blob/master/README.md
+- `--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.