Skip to main content

Concurrently detect the minimum Python versions needed to run code

Project description

PyPI version Build Status Coverage Commits since last

Vermin

Concurrently detect the minimum Python versions needed to run code. Additionally, since the code is vanilla Python, and it doesn’t have any external dependencies, it works with v2.7+ and v3+.

It functions by parsing Python code into an abstract syntax tree (AST), which it traverses and matches against internal dictionaries with 813 rules divided into 117 modules, 548 classes/functions/constants members of modules, 144 kwargs of functions, and 4 strftime directives. Including looking for v2/v3 print expr and print(expr), long, f-strings, boolean constants, "..".format(..), imports (import X, from X import Y, from X import *), function calls wrt. name and kwargs, strftime + strptime directives used, and function and variable annotations. It tries to detect and ignore user-defined functions, classes, arguments, and variables with names that clash with library-defined symbols.

Usage

It is fairly straightforward to use Vermin:

./vermin.py /path/to/your/project

Or via PyPi:

% pip install vermin
% vermin /path/to/your/project

When using continuous integration (CI) tools, like Travis CI, Vermin can be used to check that the minimum required versions didn’t change. The following is an exerpt:

install:
- ./setup_virtual_env.sh
- pip install vermin
script:
- vermin -t=2.7 -t=3 project_package otherfile.py

Examples

% ./vermin.py
Vermin 0.4.10
Usage: ./vermin.py [options] <python source files and folders..>

Options:
  -q      Quite mode. It only prints the final versions verdict.
  -v..    Verbosity level 1 to 3. -v, -vv, and -vvv shows increasingly more information.
          -v will show the individual versions required per file, -vv will additionally
          show which modules, functions etc. that constitutes the requirements.
  -t=V    Target version that files must abide by. Can be specified once or twice.
          If not met Vermin will exit with code 1.
  -p=N    Use N concurrent processes to analyze files (defaults to all cores = 8).
  -i      Ignore incompatible version warnings.
  -d      Dump AST node visits.

% ./vermin.py -q vermin
Minimum required versions: 2.7, 3.0

% ./vermin.py -q -t=3.3 vermin
Minimum required versions: 2.7, 3.0
Target versions not met:   3.3
% echo $?
1

% ./vermin.py -v examples
Detecting python files..
Analyzing 6 files using 8 processes..
             /path/to/examples/formatv2.py
2.7, 3.2     /path/to/examples/argparse.py
2.7, 3.0     /path/to/examples/formatv3.py
2.0, 3.0     /path/to/examples/printv3.py
!2, 3.4      /path/to/examples/abc.py
             /path/to/examples/unknown.py
Minimum required versions:   3.4
Incompatible versions:         2

% ./vermin.py -vv /path/to/examples/abc.py
Detecting python files..
Analyzing using 8 processes..
!2, 3.4      /path/to/examples/abc.py
  'abc' requires (2.6, 3.0)
  'abc.ABC' requires (None, 3.4)

Minimum required versions: 3.4
Incompatible versions:     2

Contributing

Contributions are very welcome, especially adding and updating detection rules of modules, functions, classes etc. to cover as many Python versions as possible. For PRs, make sure to keep the code vanilla Python and run make test first. Note that code must be remain valid and working on Python v2.7+ and v3+.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vermin-0.4.10-py2.py3-none-any.whl (21.5 kB view details)

Uploaded Python 2Python 3

File details

Details for the file vermin-0.4.10-py2.py3-none-any.whl.

File metadata

  • Download URL: vermin-0.4.10-py2.py3-none-any.whl
  • Upload date:
  • Size: 21.5 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.9.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.19.8 CPython/2.7.10

File hashes

Hashes for vermin-0.4.10-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 028f85a280d1db03b8746086d7b0b9d3867ef843aa60cc64faec6605319d7ac7
MD5 35a5cc80be6f677872c82c03b30d5428
BLAKE2b-256 9c61de8c77284cc1b3f47ef33d78c174bfc0feb04e20c6782556db1187fd8be8

See more details on using hashes here.

Supported by

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