BETSEE 1.1.1.0 (Nicer Nestor) released. Significant changes include: * Dependencies bumped: * PySide2 >= 5.12.3, the first official stable release of PySide2. This release is now supported by both the pip and conda packaging ecosystems and hence safely referenceable in this project. * Issues resolved: * Python 3.8 temporarily blacklisted. As discussed at upstream issue PYSIDE-939, PySide2 and thus BETSEE as well is currently incompatible with Python 3.8. * Install-time Python version enforced. The minimum mandatory version of Python required by this project is now enforced at setuptools-based install time via the recently introduced "python_requires" setup() key in our top-level "setup.py" installer. * pypa/pip#6163 and pypa/pip#6434. This commit circumvents a countably infinite number of issues introduced by both pip 19.0.0 and 19.1.0 - all pertaining to PEP 517 and 518, which is to say "pyproject.toml". The mere existence of a "pyproject.toml" file fundamentally breaks pip in inexplicable and horrifying ways: a significantly worse state of affairs than the pre-PEP 517 and 518 days of setuptools yore. Say what you will of setuptools ("...so much hate"), but at least it sorta worked. The same cannot be said of recent pip versions, which absolutely do not work whatsoever. "Die, pip! Die!" Specifically: * pypa/pip#6163 resolved. All files and subdirectories of the project directory containing the top-level "setup.py" script are now safely registered to be importable modules and packages. Technically, this should not be needed. The current build framework (e.g., pip, setuptools) should implicitly guarantee this to be the case. Indeed, the obsolete setuptools-based "easy_install" script does so. Sadly, pip >= 19.0.0 fails to do so for projects defining a top-level "pyproject.toml" file. Although upstream purports to have resolved this, the most recent stable release of pip continues to suffer this. This is suffering. * pypa/pip#6434 resolved. The top-level "pyproject.toml" file now explicitly declares a default value for the "build-backend" key. Doing so safeguards backward compatibility with pip 19.1.0, which erroneously violated PEP 51{7,8} by failing to fallback to a sane default value in the absence of this key. If this key is left undeclared, pip 19.1.0 fails on attempting to perform an editable (i.e., developer-specific) installation of this project. * tox-dev/tox#765 resolved. "tox" bundles an obsolete version of "virtualenv" itself bundling obsolete versions of both "pip" and "setuptools", which obstructs sanity. Our "tox.ini" configuration resolves this issue by instructing "tox" to manually update both "setuptools" and "virtualenv" to their most recent stable releases. * Entry points (i.e., wrapper scripts) resolved. Specifically: * Windows-specific entry points installable. Entry points yet again install as expected under non-WSL Windows variants (i.e., vanilla, Cygwin Windows). * Dependency entry points preserved. Long-standing issues with a custom monkey patch applied by our top-level "setup.py" script at setuptools-based application installation time have now been resolved. Previously, this patch globally applied to all dependencies installed by "easy_install" (but neither "pip" nor "conda", which fortuitously remain unaffected). Now, this monkey patch only locally applies to this project and downstream consumers of this project (e.g., BETSEE). * Setuptools validation relaxed. Validation of the currently installed version of setuptools has been relaxed to accept recent non-standard version strings (e.g., "41.6.0.post20191029"). * "all" extras installable. The "all" extra listing the set of all optional dependencies required by this project is now safely installable, as required for "tox" integration. * Testing improved: * GitLab CI + "tox". Specifically: * Rewrote the top-level ".gitlab-ci.yml" file from the ground up to test both installation and runtime on all supported Python 3.x versions (rather than runtime on the most recent stable Python 3.x version) and leverage industry standards, including: * A test matrix exercising all official Python version-tagged Docker images rather than a single unofficial Python version-agnostic Docker image (i.e., "continuumio/anaconda3"). Non-slim images are currently preferred to slim variants with names suffixed by "-slim" (e.g., "python:3.8-slim"), as the latter fail to include C and C++ compilers required to build and install wheels for Python packages both lacking official wheels and containing mandatory C extensions (e.g., "psutil"). * The Python-specific "pip" and Debian-based "apt" package managers rather than the Anaconda-based "conda" package manager. An initial "apt" package cache is now explicitly created before attempting to install system-wide packages requiring this cache, including: * "libgl1-mesa-glx", providing the standard "libGL.so.1" shared library implicitly required by PySide2 Linux wheels. * The high-level "tox" wrapper rather than the lower-level "pytest" test harness. * The standard "virtualenv" package rather than GitLab-CI internals for isolating test results between different Python 3.x versions. * YAML anchor-based key mapping interpolation rather than external scripts for resolving DRY between different Python 3.x versions. * Defined a top-level "tox.ini" configuration file, installing all optional runtime dependencies to maximize test coverage. * Removed the top-level "requirements-conda.txt" and "requirements-pip.txt" files, which were frankly superfluous. * Documentation revised: * Installation instructions rewritten. These instructions have been revised from the ground up for simplicity, consistency, and with an increased emphasis on the standard pip ecosystem rather than the increasingly non-standard Anaconda ecosystem. Specifically: * "README.rst" truncated. The top-level "README.rst" file now provides only minimal instructions for installing BETSEE under the two most popular platform-agnostic package managers: pip (recommeded) and Anaconda. * pip-based editable installation. The top-level "README.rst" file now advises developers to leverage pip rather than setuptools when performing an editable installation of this project. * "setup.cfg"-based PyPI documentation. The top-level "setup.cfg" file now transcludes the contents of the top-level "README.rst" file, a substantial improvement over the prior code-based approach strewn throughout the codebase (e.g., "setup.py", "betse_setup.buputil"). * Git maintenance: * pip directories untracked. All top-level pip-specific temporary directories (e.g., "pip-wheel-metadata") are now ignored with respect to Git tracking. * API generalized: * Generalized the top-level "setup.py" script: * Called the newly defined betsee_setup.beuputil.die_unless_setuptools_version_at_least() validator to ensure the currently installed version of setuptools satisfies all installation-time requirements. * Added a new "test" key-value pair to the setuptools-specific "extras_require" dictionary, enabling "tox" to install all mandatory testing requirements of this application without duplicating those requirements in the top-level "tox.ini" file. * Refactored the "betsee_setup.beupbuild" submodule to defer to the new "betse.lib.setuptools.command.supcmdbuild" submodule. * Generalized the "betsee_setup.beuputil" submodule: * Minimized this submodule to the smallest set of requisite functions required by the top-level "setup.py" script. * Defined a new die_unless_setuptools_version_at_least() validator. * Generalized the die_unless_setuptools_version_at_least() function to use the general-purpose "distutils.version.LooseVersion" class rather than the strict "distutils.version.StrictVersion" class. * Defined a new placeholder "betsee_test.unit.test_noop" submodule, defining a single placeholder test_noop() unit test guaranteed to pass. This submodule will be removed after defining the first non-placeholder test submodule, but is currently required to avoid "tox" test-time failures. (Distortional contortionism exhibits surfactant bifurcations, unfurled!)