Skip to main content

minimal versioning tool

Project description

Miniver

license: CC0-1.0 PyPI version Travis build Appveyor build

Like versioneer, but smaller

Miniver is a minimal versioning tool that serves the same purpose as Versioneer, except that it only works with Git and multiplatform support is still experimental.

Why would I use this?

If you are developing a Python package inside a Git repository and want to get the version directly from Git tags, rather than hard-coding version strings everywhere.

This is the same problem that Versioneer solves, but Miniver is less than 200 lines of code, whereas Versioneer is over 2000. The tradeoff is that Miniver only works with Git and Python 3.5 (or above), and has only been tested on Debian Linux and Mac OSX (automated with Travis) and for Windows on Appveyor.

Support for Python 2 is not a goal, as Python 2 is fast approaching its end of life (2020), and we want to encourage people to use Python 3! That being said, Christian Marquardt has a fork that also works with Python 2

Usage

The simplest way to use Miniver is to run the following in your project root:

curl https://raw.githubusercontent.com/jbweston/miniver/master/install-miniver | python - <your_package_directory>

This will grab the latest files from GitHub and set up Miniver for your project.

I get an unknown version!

The version is reported as unknown (plus the current git hash) when there are no valid tags in the git history. You should create an annotated tag so that Miniver reports a reasonable version.

If your project uses unannotated tags for versioning (though this is not the recommended way) then you'll need to run the following in order to modify Miniver's behaviour:

curl https://raw.githubusercontent.com/jbweston/miniver/master/unannotated-tags.patch | patch <your_package_directory>/_version.py

I don't want to type that URL every time I use this

You can pip install miniver, which will give you the install-miniver script. Then you can simply run the following from your project root to use Miniver:

install-miniver <your_package_directory>

Can I use this without executing random code from the internet?

Sure! Copy miniver/_version.py and miniver/_static_version.py from this repository into your package directory, then copy the following snippets into the appropriate files:

# Your package's __init__.py
from ._version import __version__
del _version
# Your project's setup.py

# Loads _version.py module without importing the whole package.
def get_version_and_cmdclass(package_name):
    import os
    from importlib.util import module_from_spec, spec_from_file_location
    spec = spec_from_file_location('version',
                                   os.path.join(package_name, '_version.py'))
    module = module_from_spec(spec)
    spec.loader.exec_module(module)
    return module.__version__, module.cmdclass


version, cmdclass = get_version_and_cmdclass('my_package')

setup(
    name='my_package',
    version=version,
    cmdclass=cmdclass,
)
# Your project's .gitattributes
my_package/_static_version.py export-subst

replacing 'my_package' in the above with the name of your package (this should be the same as the name of the directory into which you copied the contents of miniver).

That's it!

License

Miniver is in the public domain under a CC0 license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

miniver-0.5.0.tar.gz (9.5 kB view details)

Uploaded Source

Built Distribution

miniver-0.5.0-py3-none-any.whl (10.6 kB view details)

Uploaded Python 3

File details

Details for the file miniver-0.5.0.tar.gz.

File metadata

  • Download URL: miniver-0.5.0.tar.gz
  • Upload date:
  • Size: 9.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.11.1 setuptools/39.2.0 requests-toolbelt/0.8.0 tqdm/4.19.5 CPython/3.6.1

File hashes

Hashes for miniver-0.5.0.tar.gz
Algorithm Hash digest
SHA256 e379b49c6eb57982701f12505a7f532252cd94a00c5146305c74c0adfac692de
MD5 3e8d9a67fb2eeb6705ddc549ed00d2e7
BLAKE2b-256 a0c826e84f68f7171fee9216af73ea0c9ad1882de4fa0d0677cf2a7331f09e66

See more details on using hashes here.

File details

Details for the file miniver-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: miniver-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 10.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.11.1 setuptools/39.2.0 requests-toolbelt/0.8.0 tqdm/4.19.5 CPython/3.6.1

File hashes

Hashes for miniver-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 48e6e7aaaf3858501e8a7835f4295e90561c766c524584d8e642671dd75517a2
MD5 f8febb1cf8f21dafe54974424a1c6ee4
BLAKE2b-256 d7576b99bb236b4c1788cafa7539a21950f5803ca9773694bae8a6306e8fce1e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page