I'm glad to announce the release of psutil 5.9.0:
psutil (process and system utilities) is a cross-platform library for
retrieving information on running processes and system utilization (CPU,
memory, disks, network) in Python. It is useful mainly for system
monitoring, profiling and limiting process resources and management of
running processes. It implements many functionalities offered by command
line tools such as: ps, top, lsof, netstat, ifconfig, who, df, kill, free,
nice, ionice, iostat, iotop, uptime, pidof, tty, taskset, pmap. It
currently supports Linux, Windows, macOS, Sun Solaris, FreeBSD, OpenBSD,
NetBSD and AIX, both 32-bit and 64-bit architectures. Supported Python
versions are 2.6, 2.7 and 3.4+. PyPy is also known to work.
1851, [Linux]: cpu_freq() is slow on systems with many CPUs. Read current
frequency values for all CPUs from /proc/cpuinfo instead of opening many
files in /sys fs. (patch by marxin)
1992: NoSuchProcess message now specifies if the PID has been reused.
1992: error classes (NoSuchProcess, AccessDenied, etc.) now have a better
formatted and separated __repr__ and __str__ implementations.
1996, [BSD]: add support for MidnightBSD. (patch by Saeed Rasooli)
1999, [Linux]: disk_partitions(): convert /dev/root device (an alias used
on some Linux distros) to real root device path.
2005: PSUTIL_DEBUG mode now prints file name and line number of the debug
messages coming from C extension modules.
2042: rewrite HISTORY.rst to use hyperlinks pointing to psutil API doc.
1456, [macOS], [critical]: cpu_freq() min and max are set to 0 if can't be
determined (instead of crashing).
1512, [macOS]: sometimes Process.connections() will crash with EOPNOTSUPP
for one connection; this is now ignored.
1598, [Windows]: disk_partitions() only returns mountpoints on drives where
it first finds one.
1874, [SunOS]: swap output error due to incorrect range.
1892, [macOS]: cpu_freq() broken on Apple M1.
1901, [macOS]: different functions, especially Process.open_files() and
Process.connections(), could randomly raise AccessDenied because the
internal buffer of proc_pidinfo(PROC_PIDLISTFDS) syscall was not big
enough. We now dynamically increase the buffer size until it's big enough
instead of giving up and raising AccessDenied, which was a fallback to
1904, [Windows]: OpenProcess fails with ERROR_SUCCESS due to GetLastError()
called after sprintf(). (patch by alxchk)
1913, [Linux]: wait_procs() should catch subprocess.TimeoutExpired
1919, [Linux]: sensors_battery() can raise TypeError on PureOS.
1921, [Windows]: swap_memory() shows committed memory instead of swap.
1940, [Linux]: psutil does not handle ENAMETOOLONG when accessing process
file descriptors in procfs. (patch by Nikita Radchenko)
1948, [critical]: memoize_when_activated decorator is not thread-safe.
(patch by Xuehai Pan)
1953, [Windows], [critical]: disk_partitions() crashes due to insufficient
buffer len. (patch by MaWe2019)
1965, [Windows], [critical]: fix "Fatal Python error: deallocating None"
when calling users() multiple times.
1980, [Windows]: 32bit / WoW64 processes fails to read Process.name()
longer than 128 characters resulting in AccessDenied. This is now fixed.
(patch by PetrPospisil)
1991, [critical]: process_iter() is not thread safe and can raise TypeError
if invoked from multiple threads.
1956, [macOS]: Process.cpu_times() reports incorrect timings on M1
machines. (patch by Olivier Dormond)
2023, [Linux]: cpu_freq() return order is wrong on systems with more than 9
- Home page: https://github.com/giampaolo/psutil
- Download: https://pypi.org/project/psutil/#files
- Documentation: http://psutil.readthedocs.io
- What's new: https://github.com/giampaolo/psutil/blob/master/HISTORY.rst
Giampaolo - https://gmpy.dev/about
I am pleased to announce the release of SfePy 2021.4.
SfePy (simple finite elements in Python) is a software for solving systems of
coupled partial differential equations by finite element methods. It is
distributed under the new BSD license.
Home page: https://sfepy.org
Mailing list: https://mail.python.org/mm3/mailman3/lists/sfepy.python.org/
Git (source) repository, issue tracker: https://github.com/sfepy/sfepy
Highlights of this release
- improved pyvista-based visualization script resview.py
- gallery images generated using resview.py
- homogenization tools: new parallel recovery of multiple microstructures
- new "dry water" flow example
For full release notes see .
Contributors to this release in alphabetical order:
Florian Le Bourdais
Brylie Christopher Oxley
For various reasons you might want to know which Python versions are
* provide a list of pyXY targets to tox
* remove a no longer supported version of Python from the .whl files
you generate to upload to PyPI
* determine which ‘Programming Language :: Python ::’ classifiers to
include in your package information
* check if you have the latest micro version of a Python installed on
all of your servers
extracting this kind of information from various PEPs (that often have
slightly different formats), python.org and other web pages, is
cumbersome. This package both provides a commandline utility
python_release_info that you can use in scripts, makefiles, etc. and a
programmatic interface to get to release information.
The release information is retrieved from the internet and can be
updated e.g. only a daily basis, without having update the package
itself. A Python or shell script, can check if one or more new versions
are available for download and take action accordingly. Pre-release
information can be queried as well.
The release information is automatically extracted (other information,
like EOL info is not), currently for cpython only. If you are interested
in incorporating release information of specific other releases, let me
know (if possible including mailing list/website etc, at where I could
obtain the most accurate and timely information updates).
Feedback on whether pre-release information should be kept (currently
superseded when the actual .0 release is available) for a specific
project is welcome as well.
I’m happy to announce the release of attrs 21.3.0: <https://github.com/python-attrs/attrs/releases/tag/21.3.0>
attrs is the direct ancestor of – and the inspiration for – dataclasses in the standard library and remains the more powerful toolkit for creating regular classes without getting bogged down with writing identical boilerplate again and again: <https://www.attrs.org/>
Heartfelt thanks go to my generous sponsors <https://github.com/sponsors/hynek>, companies subscribing on Tidelift <https://tidelift.com/subscription/pkg/pypi-attrs>, and people who bought me a coffee on <https://ko-fi.com/the_hynek>! Support like that makes me work on FOSS on a Saturday afternoon! <3
This is a big release in the history of attrs and finishes an arc that took way too long and also delayed this very overdue release. But it's done: import attrs that has been talked about for years, but fell victim to “just this one more thing” has finally landed.
From now on, modern attrs code looks like this:
from attrs import define
modern: bool = True
The define/field APIs have been around for over a year and were very popular, now the rest of the package followed suit. I'm very excited that attrs remains relevant and keeps evolving over now more than half a decade. If you're curious about some of the background, the docs now contain a short explanation and history lesson. As long as our users keep pushing us, we will keep pushing forward class generation in Python!
Big thanks to my GitHub Sponsors, Tidelift subscribers, and Ko-fi buyers that help me mustering the motivation for such long-running project!
Since the release took so long, there's more highlights than we can enumerate here, we'd just like to point out a breaking change in the new APIs: converters now run on setting attributes by default. If this is causing problems to you, you can disable that behavior by setting @define(on_setattr=).
- When using @define, converters are now run by default when setting an attribute on an instance -- additionally to validators. I.e. the new default is on_setattr=[attrs.setters.convert, attrs.setters.validate].
This is unfortunately a breaking change, but it was an oversight, impossible to raise a DeprecationWarning about, and it's better to fix it now while the APIs are very fresh with few users. #835, #886
- import attrs has finally landed! As of this release, you can finally import attrs using its proper name.
Not all names from the attr namespace have been transferred; most notably attr.s and attr.ib are missing. See attrs.define and attrs.field if you haven't seen our next-generation APIs yet. A more elaborate explanation can be found On The Core API Names
This feature is at least for one release provisional. We don't plan on changing anything, but such a big change is unlikely to go perfectly on the first strike.
The API docs have been mostly updated, but it will be an ongoing effort to change everything to the new APIs. Please note that we have not moved -- or even removed -- anything from attr!
Please do report any bugs or documentation inconsistencies! #887
- attr.asdict(retain_collection_types=False) (default) dumps collection-esque keys as tuples. #646, #888
- __match_args__ are now generated to support Python 3.10's Structural Pattern Matching. This can be controlled by the match_args argument to the class decorators on Python 3.10 and later. On older versions, it is never added and the argument is ignored. #815
- If the class-level on_setattr is set to attrs.setters.validate (default in @define and @mutable) but no field defines a validator, pretend that it's not set. #817
- The generated __repr__ is significantly faster on Pythons with f-strings. #819
- Attributes transformed via field_transformer are wrapped with AttrsClass again. #824
- Generated source code is now cached more efficiently for identical classes. #828
- Added attrs.converters.to_bool(). #830
- attrs.resolve_types() now resolves types of subclasses after the parents are resolved. #842 #843
- Added new validators: lt(val) (< val), le(va) (≤ val), ge(val) (≥ val), gt(val) (> val), and maxlen(n). #845
- attrs classes are now fully compatible with cloudpickle (no need to disable repr anymore). #857
- Added new context manager attrs.validators.disabled() and functions attrs.validators.(set|get)_disabled(). They deprecate attrs.(set|get)_run_validators(). All functions are interoperable and modify the same internal state. They are not – and never were – thread-safe, though. #859
- attrs.validators.matches_re() now accepts pre-compiled regular expressions in addition to pattern strings. #877
 I have an issue from 2018 that I wanted to "come back the moment this lands".
[re-posting this as the original was accidentally discarded]
I have started a newspaper (not newsletter) focused
on interesting reads on Python mailing lists. Don't tag
on the fact that holiday seasons are the worst times for
launch according to marketing folks, I started this to note
down interesting mails. This might also be a great way to
bring mailing list gems to a wider readership. So, here's
the url https://pyherald.com/
about | blog
On behalf of the Nikola team, I am pleased to announce the immediate
availability of Nikola v8.2.0. This release includes some new features
as well as a bunch of bugfixes.
What is Nikola?
Nikola is a static site and blog generator, written in Python.
It can use Mako and Jinja2 templates, and input in many popular markup
formats, such as reStructuredText and Markdown — and can even turn
Jupyter Notebooks into blog posts! It also supports image galleries,
and is multilingual. Nikola is flexible, and page builds are extremely
fast, courtesy of doit (which is rebuilding only what has been changed).
Find out more at the website: https://getnikola.com/
Install using `pip install Nikola`.
* Add ``category_titles``, ``category_descriptions``, ``tag_titles``,
``tag_descriptions`` to default context of tags page (Issue #3584)
* Add Maori translation
* Add Occitan translation
* New ``auto_command_starting`` signal when ``nikola auto`` is
* ``typogrify_custom`` filter adds a default value for
``typogrify_filters`` so that ``ignore_tags`` can be specified
as the only option.
* The default ``ignore_tags`` are appended to the user-supplied
``ignore_tags`` added via ``typogrify_custom``.
* Allow adding comment systems from a plugin (Issue #3544)
* New ``CommentSystem`` plugin category (Issue #3544)
* Fix changes to ``INDEX_READ_MORE_LINK`` and ``FEED_READ_MORE_LINK``
not triggering rebuilds
* Make ``CATEGORY_TITLES``, ``CATEGORY_DESCRIPTIONS``, ``TAG_TITLES``,
``TAG_DESCRIPTIONS`` translatable settings for consistency (Issue #3584)
* Fix bug with posts after the first one appearing shifted due to a
``<div>`` closed too early (Issue #3573, #3564)
* Fix support for files outside of site root directory on Windows
* Support passing ``--backend`` and ``--db-file`` to ``nikola auto``
* Support blank values in certain WordPress-imported structures
* Typogrify ignores ``div`` elements with ``.math`` CSS class.
* Adjust panorama aspect ratio to 3:1 and document behaviour.
Chris Warrick <https://chriswarrick.com/>
I’m happy to announce the release of pymssql 2.2.3, available to download
via pip and GitHub. Pymssql is a simple database interface for Python
that builds on top of FreeTDS to provide a Python DB-API (PEP-249)
interface to Microsoft SQL Server.
The official documentation is available at: https://pymssql.readthedocs.io
The sources, discussions and bug tracker: https://github.com/pymssql/pymssql.
Below please see the changes since last announcement.
Version 2.2.3 - 2021-12-21 - Mikhail Terekhov
- Build wheels for Python-3.10.
- Use FreeTDS-1.3.4 for official wheels on PyPi.
- Enable krb5 in Linux wheels (#734).
- Fix UnicodeEncodeError for non-ascii database name (#484).
- Fix pymssql.Binary (#504).
- On macOS check for FreeTDS in homebrew prefix when building.
- Some documentation changes.
Version 2.2.2 - 2021-07-24 - Mikhail Terekhov
- Use FreeTDS-1.3 for official wheels on PyPi.
- On macOS use delocate to bundle dependencies when building wheels.
- Some documentation changes.
Version 2.2.1 - 2021-04-15 - Mikhail Terekhov
- Publish Linux wheels for the all supported platforms.
manylinux1 wheels are not compatible with modern glibc and OpenSSL.
- Add readthedocs configuration file.
Version 2.2.0 - 2021-04-08 - Mikhail Terekhov
- Add Python-3.9 to the build and test matrix.
- Drop support for Python2 and Python3 < 3.6.
- Support bulk copy (#279). Thanks to Simon.StJG (PR-689).
- Wheels on PyPI link FreeTDS statically.
- Wheels on PyPI linked against OpenSSL.
- Convert pymssql to a package. **Potential compatibility issue:** projects using
low level *_mssql* module need to import it from *pymssql* first.
- Fixed a deadlock caused by a missing release of GIL (#540), thanks to
filip.stefanak (PR-541) and Juraj Bubniak (PR-683).
- Prevents memory leak on login failure. Thanks to caogtaa and Simon.StJG (PR-690).
- Fix check for TDS version (#652 and #669).
- Documentation fixes. Thanks to Simon Biggs, Shane Kimble, Simon.StJG and Dale Evans.
- Introduce script dev/build.py to build FreeTDS and pymssql wheels.
- Simplify setup.py, introduce environment variables to select FreeTDS includes
We've done a comparative benchmark (speed and memory usage) with Smil and Scikit-Image.
Smil is a mathematical morphology dedicated library of functions. So comparisons are done only on this area.
We've been working on Mathematical Morphology for more than 50 years now the discipline was created here at our research
department in the sixties. Smil inherits the experience of previous libraries and software we've been writing since the
In just some few words, Smil can be orders of magnitude faster than Scikit-image (hundreds or even thousands) on some
operations thanks to parallelization and vectorization (SIMD), depending on the computer architecture.
Smil doesn't replace scikit-image but may be a good complement to scikit-image when speed is important.
Benchmark results are available at :
Smil web site is here :
Comments are welcome,
Jose Marcio MARTINS DA CRUZ, Ph.D.
Ecole des Mines de Paris
Centre de Morphologie Mathématique
Mon livre sur le spam : http://amzn.to/LEscRu