Packages#
- class lsst.utils.packages.Packages#
Bases:
dictA table of packages and their versions.
There are a few different types of packages, and their versions are collected in different ways:
Installed Conda packages are obtained via the Conda API. Conda is not required.
Python modules (e.g., afw, numpy; galsim is also in this group even though we only use it through the library, because no version information is currently provided through the library): we get their version from the
__version__module variable. Note that this means that we’re only aware of modules that have already been imported.Other packages provide no run-time accessible version information (e.g., astrometry_net): we get their version from interrogating the environment. Currently, that means EUPS; if EUPS is replaced or dropped then we’ll need to consider an alternative means of getting this version information.
Local versions of packages (a non-installed EUPS package, selected with
setup -r /path/to/package): we identify these through the environment (EUPS again) and use as a version the path supplemented with thegitSHA and, if the git repo isn’t clean, an MD5 of the diff.
These package versions are collected and stored in a Packages object, which provides useful comparison and persistence features.
Example usage:
from lsst.utils.packages import Packages pkgs = Packages.fromSystem() print("Current packages:", pkgs) old = Packages.read("/path/to/packages.pickle") print("Old packages:", old) print("Missing packages compared to before:", pkgs.missing(old)) print("Extra packages compared to before:", pkgs.extra(old)) print("Different packages: ", pkgs.difference(old)) old.update(pkgs) # Include any new packages in the old old.write("/path/to/packages.pickle").
Notes#
This is a wrapper around a dict with some convenience methods.
Attributes Summary
Methods Summary
difference(other)Get packages in symmetric difference of self and another
Packagesobject.extra(other)Get packages in self but not in another
Packagesobject.fromBytes(data, format)Construct the object from a byte representation.
fromSystem([include_all])Construct a
Packagesby examining the system.missing(other)Get packages in another
Packagesobject but missing from self.read(filename)Read packages from filename.
toBytes(format)Convert the object to a serialized bytes form using the specified format.
write(filename)Write to file.
Attributes Documentation
- formats: ClassVar[dict[str, str]] = {'.json': 'json', '.pickle': 'pickle', '.pkl': 'pickle', '.yaml': 'yaml'}#
Methods Documentation
- difference(other: Mapping) dict[str, tuple[str, str]]#
Get packages in symmetric difference of self and another
Packagesobject.Parameters#
- other
Packages Other packages to compare against.
Returns#
- difference
dict[str,tuple[str,str]] Packages in symmetric difference. Keys (type
str) are package names; values (typetuple[str,str]) are their versions.
- other
- extra(other: Mapping) dict[str, str]#
Get packages in self but not in another
Packagesobject.Parameters#
- other
PackagesorMapping Other packages to compare against.
Returns#
- extra
dict Extra packages. Keys (type
str) are package names; values (typestr) are their versions.
- other
- classmethod fromBytes(data: bytes, format: str) Packages#
Construct the object from a byte representation.
Parameters#
- data
bytes The serialized form of this object in bytes.
- format
str The format of those bytes. Can be
yaml,json, orpickle.
Returns#
- packages
Packages The package information read from the input data.
- data
- classmethod fromSystem(include_all: bool = False) Packages#
Construct a
Packagesby examining the system.Determine packages by examining python’s installed packages (by default filtered by
sys.modules) or distributions, conda libraries and EUPS. EUPS packages take precedence over conda and general python packages.Parameters#
- include_all
bool, optional If
False, will only include imported Python packages, installed Conda packages and locally-setup EUPS packages. IfTrueall installed Python distributions and conda packages will be reported as well as all EUPS packages that are set up.
Returns#
- packages
Packages All version package information that could be obtained.
Note#
The names of Python distributions can differ from the names of the Python packages installed by those distributions. Since
include_allset toTrueuses Python distributions andFalseuses Python packages do not expect that the answers are directly comparable.- include_all
- missing(other: Mapping) dict[str, str]#
Get packages in another
Packagesobject but missing from self.Parameters#
- other
Packages Other packages to compare against.
Returns#
- missing
dict[str,str] Missing packages. Keys (type
str) are package names; values (typestr) are their versions.
- other
- classmethod read(filename: str) Packages#
Read packages from filename.
Parameters#
- filename
str Filename from which to read. The format is determined from the file extension. Currently support
.pickle,.pkl,.json, and.yaml.
Returns#
- packages
Packages The packages information read from the file.
- filename