Package: pip-api
Sincepipis a command-line-tool,it does not have
an official, supported,importableAPI.However, this does not mean that people haven't tried toimport pip, usually
to end up with much headache whenpip's maintainers do routine refactoring.GoalThe goal of this project is to provide an importablepipAPI, which isfully
compliantwith the recommended method of usingpipfrom your program.How? By providing an importable API that wraps command-line calls topip,
this library can be used as a drop-in replacement for existing uses ofpip's
internal API.ScopeThis goal means that any new API added here must have the following
equivalents:some internalpipAPI (or combination of internal APIs)some CLI calls (or combination of CLI calls)Any functionality that is not currently possible from internalpipAPI or
CLI calls is out of scope.InstallationYou can installpip-apiwith eitherpipor withconda.With pip:python-mpipinstallpip-apiWith conda:condainstall-cconda-forgepip-apiSupported CommandsNot all commands are supported in all versions ofpipand on all platforms.
If the command you are trying to use is not compatible,pip_apiwill raise apip_api.exceptions.Incompatibleexception for your program to catch.Available with allpipversions:pip_api.version()Returns thepipversion as a string, e.g."9.0.1"pip_api.installed_distributions(local=False)Returns a list of all installed distributions as aDistributionobject with the following attributes:Distribution.name(string): The name of the installed distributionDistribution.version(packaging.version.Version): The version of the installed distributionDistribution.location(string): The location of the installed distributionDistribution.editable(bool): Whether the distribution is editable or not
Optionally takes alocalparameter to filter out globally-installed packagespip_api.parse_requirements(filename, options=None, include_invalid=False, strict_hashes=False)Takes a path to a filename of a Requirements file. Returns a mapping from package name to apip_api.Requirementobject (subclass ofpackaging.requirements.Requirement) with the following attributes:Requirement.name(string): The name of the requirement.Requirement.extras(set): A set of extras that the requirement specifies.Requirement.specifier(packaging.specifiers.SpecifierSet): ASpecifierSetof the version specified by the requirement.Requirement.marker(packaging.markers.Marker): AMarkerof the marker for the requirement. Can beNone.Requirement.hashes(dict): A mapping of hashes for the requirement, corresponding to--hash=...options.Requirement.editable(bool): Whether the requirement is editable, corresponding to-e ...Requirement.filename(str): The filename that the requirement originates from.Requirement.lineno(int): The source line that the requirement was parsed from.Optionally takes anoptionsparameter to override the regex used to skip requirements lines.
Optionally takes aninclude_invalidparameter to return anUnparsedRequirementin the event that a requirement cannot be parsed correctly.
Optionally takes astrict_hashesparameter to require that all requirements have associated hashes.Available withpip>=8.0.0:pip_api.hash(filename, algorithm='sha256')Returns the resulting as a string.
Validalgorithmparameters are'sha256','sha384', and'sha512'Available withpip>=19.2:pip_api.installed_distributions(local=False, paths=[])As described above, but with an extra optionalpathsparameter to provide a list of locations to look for installed distributions. Attempting to use thepathsparameter withpip<19.2will result in aPipError.Use casesThis library is in use by a number of other tools, including:pip-audit, to analyze dependencies for known vulnerabilitiespytest-reqs, to compare requirements files with test dependencieshashin, to add hash pinning to requirements files...and many more.