Skip to content
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!)