Most Python packages follow the convention that the version is provided as a string at [package_name].version.version
. Let's use Numpy as an example. Say I wanted to import Numpy but ensure that the minimum version is 1.18.1
. This is what I do currently:
import numpy as np
if tuple(map(int, np.version.version.split('.'))) < (1, 18, 1):
raise ImportError('Numpy version too low! Must be >= 1.18.1')
While this seems to work, it requires me to import the package before the version can be checked. It would be nice to not have to import the package if the condition is not satisfied.
It also seems a bit "hacky" and it feels like there's probably a method using the Python standard library that does this. Something like version('numpy') > '1.18.1'
. But I haven't been able to find one.
Is there a way to check the version of a package BEFORE importing it within the bounds of the Python standard library?
I am looking for a programmatic solution in Python code. Telling me to use a requirements.txt
or pip install
is not answering the question.
Edit to add context: Adding this package to my requirements.txt
is not useful as the imported package is supposed to be an optional dependency. This code would go in a submodule that is optionally loaded in the __init__.py
via a try
statement. Essentially, some functionality of the package is only available if a package of minimum version is found and successfully imported.