Hi!
I'm pleased to announce the availability of wxGlade revision 1.0.1
Please download from https://sourceforge.net/projects/wxglade/files/wxglade/1.0.1/
wxGlade is a GUI builder for wxWidgets and wxPython.
The documentation includes a tutorial for people who have not used wxPython
before.
Included are also examples for integration with matplotlib.
A snapshot of the documentation is available at http://wxglade.sourceforge.net/docs/index.html
For support, there's a mailing list at https://sourceforge.net/p/wxglade/mailman/wxglade-general/
git repository and bug tracker are at https://github.com/wxGlade/wxGlade
(These pages are also linked from the help menu.)
Changes in revision 1.0.x:
==========================
Besides many improvements in usability, code generation and widget support,
this is also a major internal refactoring of the main data structure and how
widgets in the Design window are created / updated / destroyed.
*General:*
- sizers only required where wx requires them; not required e.g. for
Frame->Panel (used to be Frame->Sizer->Panel)
- better handling of display updates when properties are edited
- accessibility and usability improvements
- Dialog example
- documentation update
*Widgets:*
- all: separate class related properties into Class / Base Classes /
Instance Class
- Dialog: add StdDialogButtonSizer and standard buttons (stock items);
support SetAffirmativeId, SetEscapeId
- Button: support for image direction
- MenuBar: support lambda event handlers
- GridBagSizer: indicate overlapped slots in the Tree view
*Generated Code:*
- no separation into __set_properties/__do_layout any more
- support for instantiation classes
*Internal:*
- internal structures refactored
- add shell window and Tree Printer
wxGlade is released under the MIT license.
Happy New Year,
Dietmar Schwertberger
dietmar(a)schwertberger.de
<P><A HREF="https://sourceforge.net/projects/wxglade/files/wxglade/1.0.1/">wxGlade 1.0.1</A> - GUI builder for wxPython (31-Dec-20)
I'm happy to announce the release of Pygments 2.11. Pygments is a
generic syntax highlighter written in Python.
Pygments 2.11 provides ten new lexers and various improvements to
existing lexers. Please have a look at the changelog
<https://pygments.org/docs/changelog/>.
Report bugs and feature requests in the issue tracker:
<https://github.com/pygments/pygments/issues>. Thanks go to all the
contributors of these lexers, and to all those who reported bugs and
waited very patiently for this release.
Download it from <https://pypi.org/project/Pygments/>, or look at
the demonstration at <https://pygments.org/demo/>.
Enjoy,
Matthäus
Hello all,
I'm glad to announce the release of psutil 5.9.0:
https://github.com/giampaolo/psutil
About
=====
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.
What's new
==========
2021-12-29
Enhancements
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.
Bug fixes
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
avoid crashing.
1904, [Windows]: OpenProcess fails with ERROR_SUCCESS due to GetLastError()
called after sprintf(). (patch by alxchk)
1913, [Linux]: wait_procs() should catch subprocess.TimeoutExpired
exception.
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
CPUs.
Links
=====
- 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
Hashes
======
psutil-5.9.0-cp27-cp27m-manylinux2010_i686.whl
md5: 0823588f7c71a1fed902ffead1435045
sha256: 55ce319452e3d139e25d6c3f85a1acf12d1607ddedea5e35fb47a552c051161b
psutil-5.9.0-cp27-cp27m-manylinux2010_x86_64.whl
md5: 71d543235afe2e744e8a3750faed6a9a
sha256: 7336292a13a80eb93c21f36bde4328aa748a04b68c13d01dfddd67fc13fd0618
psutil-5.9.0-cp27-cp27mu-manylinux2010_i686.whl
md5: e8d8a31d4d970e076fd0ee15376934b3
sha256: cb8d10461c1ceee0c25a64f2dd54872b70b89c26419e147a05a10b753ad36ec2
psutil-5.9.0-cp27-cp27mu-manylinux2010_x86_64.whl
md5: 43d77ebea88d42281ae9739d0422ff6c
sha256: 7641300de73e4909e5d148e90cc3142fb890079e1525a840cf0dfd39195239fd
psutil-5.9.0-cp27-none-win32.whl
md5: f92f9bc67f7027712a50d2ab8a1d68b8
sha256: ea42d747c5f71b5ccaa6897b216a7dadb9f52c72a0fe2b872ef7d3e1eacf3ba3
psutil-5.9.0-cp27-none-win_amd64.whl
md5: 67f518186af7e65f6aa4f94e8362cde8
sha256: ef216cc9feb60634bda2f341a9559ac594e2eeaadd0ba187a4c2eb5b5d40b91c
psutil-5.9.0-cp310-cp310-macosx_10_9_x86_64.whl
md5: bb2d720d0811b983b5cdf82d812f087a
sha256: 90a58b9fcae2dbfe4ba852b57bd4a1dded6b990a33d6428c7614b7d48eccb492
psutil-5.9.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl
md5: b1c465fdffe8df811add813c1956c52c
sha256: ff0d41f8b3e9ebb6b6110057e40019a432e96aae2008951121ba4e56040b84f3
psutil-5.9.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
md5: 7a8bfe20b333fc5f031f3993049e4f43
sha256: 742c34fff804f34f62659279ed5c5b723bb0195e9d7bd9907591de9f8f6558e2
psutil-5.9.0-cp310-cp310-win32.whl
md5: 946b6aed799fdde67e1d2d522f0cf3ec
sha256: 8293942e4ce0c5689821f65ce6522ce4786d02af57f13c0195b40e1edb1db61d
psutil-5.9.0-cp310-cp310-win_amd64.whl
md5: d550982ad38aef43e13c34a086f36886
sha256: 9b51917c1af3fa35a3f2dabd7ba96a2a4f19df3dec911da73875e1edaf22a40b
psutil-5.9.0-cp37-cp37m-macosx_10_9_x86_64.whl
md5: 900c6687fd4343a11226944e534a9ecf
sha256: 3d00a664e31921009a84367266b35ba0aac04a2a6cad09c550a89041034d19a0
psutil-5.9.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl
md5: 015f2feb5abdaad90df1dd9601e1852a
sha256: 7779be4025c540d1d65a2de3f30caeacc49ae7a2152108adeaf42c7534a115ce
psutil-5.9.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
md5: 518c44a672ac81037ddf0c63e278a0c9
sha256: 072664401ae6e7c1bfb878c65d7282d4b4391f1bc9a56d5e03b5a490403271b5
psutil-5.9.0-cp37-cp37m-win32.whl
md5: 83e1052f48469c6b0ca7a35629d44dff
sha256: df2c8bd48fb83a8408c8390b143c6a6fa10cb1a674ca664954de193fdcab36a9
psutil-5.9.0-cp37-cp37m-win_amd64.whl
md5: e87dcb40e31b8acfd38517dfae905ad5
sha256: 1d7b433519b9a38192dfda962dd8f44446668c009833e1429a52424624f408b4
psutil-5.9.0-cp38-cp38-macosx_10_9_x86_64.whl
md5: 454b52a269964276ecee1f368717d504
sha256: c3400cae15bdb449d518545cbd5b649117de54e3596ded84aacabfbb3297ead2
psutil-5.9.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl
md5: 4646ec36cd4ff3a1382e5a0842325c6c
sha256: b2237f35c4bbae932ee98902a08050a27821f8f6dfa880a47195e5993af4702d
psutil-5.9.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
md5: fb46ae363c209c6139350d22494b0ca2
sha256: 1070a9b287846a21a5d572d6dddd369517510b68710fca56b0e9e02fd24bed9a
psutil-5.9.0-cp38-cp38-win32.whl
md5: 9dc72d227135a097dfe3b9a9704f0d4e
sha256: 76cebf84aac1d6da5b63df11fe0d377b46b7b500d892284068bacccf12f20666
psutil-5.9.0-cp38-cp38-win_amd64.whl
md5: 757585f0dcecb2e0b9bef4a514ace2bf
sha256: 3151a58f0fbd8942ba94f7c31c7e6b310d2989f4da74fcbf28b934374e9bf841
psutil-5.9.0-cp39-cp39-macosx_10_9_x86_64.whl
md5: 499ae21609e3d49244ee32441383356b
sha256: 539e429da49c5d27d5a58e3563886057f8fc3868a5547b4f1876d9c0f007bccf
psutil-5.9.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl
md5: ebc9b13b86f48b9cb5c673b4af3e091b
sha256: 58c7d923dc209225600aec73aa2c4ae8ea33b1ab31bc11ef8a5933b027476f07
psutil-5.9.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
md5: 2b24eaf730adc451b746d9c6a332c0f4
sha256: 3611e87eea393f779a35b192b46a164b1d01167c9d323dda9b1e527ea69d697d
psutil-5.9.0-cp39-cp39-win32.whl
md5: b8970ec246199182214148e7c3d060e9
sha256: 4e2fb92e3aeae3ec3b7b66c528981fd327fb93fd906a77215200404444ec1845
psutil-5.9.0-cp39-cp39-win_amd64.whl
md5: 75d0c4cf515a5acd882fd30e87f6d13f
sha256: 7d190ee2eaef7831163f254dc58f6d2e2a22e27382b936aab51c835fc080c3d3
psutil-5.9.0.tar.gz
md5: 573e874b900656b0f6f20f49ed6547c4
sha256: 869842dbd66bb80c3217158e629d6fceaecc3a3166d3d1faee515b05dd26ca25
--
Giampaolo - https://gmpy.dev/about
I am pleased to announce the release of SfePy 2021.4.
Description
-----------
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 [1].
Cheers,
Robert Cimrman
[1] http://docs.sfepy.org/doc/release_notes.html#id1
---
Contributors to this release in alphabetical order:
Robert Cimrman
Yves Delley
Florian Le Bourdais
Vladimir Lukes
Brylie Christopher Oxley
Tomáš Zítka
For various reasons you might want to know which Python versions are
“current”:
* 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.
Hi everyone,
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[1], 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
@define
class HelloWorld:
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=[]).
Full Changelog
Backward-incompatible Changes
- 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
Changes
- 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
[1] 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]
Greetings lists,
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/
Kind Regards,
Abdur-Rahmaan Janhangeer
about | blog
github
Mauritius
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/
Downloads
=========
Install using `pip install Nikola`.
Changes
=======
Features
--------
* 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
starting
* ``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)
Bugfixes
--------
* 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
(Issue #3535)
* Typogrify ignores ``div`` elements with ``.math`` CSS class.
(Issue #3512)
* Adjust panorama aspect ratio to 3:1 and document behaviour.
--
Chris Warrick <https://chriswarrick.com/>
PGP: 5EAAEA16
Hello,
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.
Enjoy,
Mikhail
Version 2.2.3 - 2021-12-21 - Mikhail Terekhov
=============================================
General
-------
- 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
=============================================
General
-------
- 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
=============================================
General
-------
- 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
=============================================
General
-------
- Add Python-3.9 to the build and test matrix.
- Drop support for Python2 and Python3 < 3.6.
Features
--------
- 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.
Bug fixes
---------
- 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.
Internals
---------
- Introduce script dev/build.py to build FreeTDS and pymssql wheels.
- Simplify setup.py, introduce environment variables to select FreeTDS includes
and libraries.