summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--python-pip-api.spec385
-rw-r--r--sources1
3 files changed, 387 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..6fd26da 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/pip-api-0.0.30.tar.gz
diff --git a/python-pip-api.spec b/python-pip-api.spec
new file mode 100644
index 0000000..a3905a7
--- /dev/null
+++ b/python-pip-api.spec
@@ -0,0 +1,385 @@
+%global _empty_manifest_terminate_build 0
+Name: python-pip-api
+Version: 0.0.30
+Release: 1
+Summary: An unofficial, importable pip API
+License: Apache Software License
+URL: http://github.com/di/pip-api
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/69/a2/90dd01b87277ae65a6fb725dae86a039aeb34e24f576600abd0434aa95c4/pip-api-0.0.30.tar.gz
+BuildArch: noarch
+
+Requires: python3-pip
+
+%description
+
+<!--- BADGES: START --->
+[![GitHub - License](https://img.shields.io/github/license/di/pip-api?logo=github&style=flat&color=green)][#github-license]
+[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pip-api?logo=pypi&style=flat&color=blue)][#pypi-package]
+[![PyPI - Package Version](https://img.shields.io/pypi/v/pip-api?logo=pypi&style=flat&color=orange)][#pypi-package]
+[![Conda - Platform](https://img.shields.io/conda/pn/conda-forge/pip-api?logo=anaconda&style=flat)][#conda-forge-package]
+[![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/pip-api?logo=anaconda&style=flat&color=orange)][#conda-forge-package]
+[![Conda Recipe](https://img.shields.io/static/v1?logo=conda-forge&style=flat&color=green&label=recipe&message=pip-api)][#conda-forge-feedstock]
+
+[#github-license]: https://github.com/di/pip-api/blob/master/LICENSE
+[#pypi-package]: https://pypi.org/project/pip-api/
+[#conda-forge-package]: https://anaconda.org/conda-forge/pip-api
+[#conda-forge-feedstock]: https://github.com/conda-forge/pip-api-feedstock
+<!--- BADGES: END --->
+
+Since [`pip`](https://pypi.org/p/pip) is a command-line-tool, [it does not have
+an official, supported, _importable_
+API](https://pip.pypa.io/en/latest/user_guide/#using-pip-from-your-program).
+
+However, this does not mean that people haven't tried to `import pip`, usually
+to end up with much headache when `pip`'s maintainers do routine refactoring.
+
+## Goal
+The goal of this project is to provide an importable `pip` API, which is _fully
+compliant_ with the recommended method of using `pip` from your program.
+
+How? By providing an importable API that wraps command-line calls to `pip`,
+this library can be used as a drop-in replacement for existing uses of `pip`'s
+internal API.
+
+### Scope
+This goal means that any new API added here must have the following
+equivalents:
+
+- some internal `pip` API (or combination of internal APIs)
+- some CLI calls (or combination of CLI calls)
+
+Any functionality that is not currently possible from internal `pip` API or
+CLI calls is out of scope.
+
+## Installation
+
+You can install `pip-api` with either `pip` or with `conda`.
+
+**With pip**:
+
+```sh
+python -m pip install pip-api
+```
+
+**With conda**:
+
+```sh
+conda install -c conda-forge pip-api
+```
+
+## Supported Commands
+
+Not all commands are supported in all versions of `pip` and on all platforms.
+If the command you are trying to use is not compatible, `pip_api` will raise a
+`pip_api.exceptions.Incompatible` exception for your program to catch.
+
+### Available with all `pip` versions:
+* `pip_api.version()`
+ > Returns the `pip` version as a string, e.g. `"9.0.1"`
+
+* `pip_api.installed_distributions(local=False)`
+ > Returns a list of all installed distributions as a `Distribution` object with the following attributes:
+ > * `Distribution.name` (`string`): The name of the installed distribution
+ > * `Distribution.version` ([`packaging.version.Version`](https://packaging.pypa.io/en/latest/version/#packaging.version.Version)): The version of the installed distribution
+ > * `Distribution.location` (`string`): The location of the installed distribution
+ > * `Distribution.editable` (`bool`): Whether the distribution is editable or not
+ > Optionally takes a `local` parameter to filter out globally-installed packages
+
+* `pip_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 a `pip_api.Requirement` object (subclass of [`packaging.requirements.Requirement`](https://packaging.pypa.io/en/latest/requirements/#packaging.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`](https://packaging.pypa.io/en/latest/specifiers/#packaging.specifiers.SpecifierSet)): A `SpecifierSet` of the version specified by the requirement.
+ > * `Requirement.marker` ([`packaging.markers.Marker`](https://packaging.pypa.io/en/latest/markers/#packaging.markers.Marker)): A `Marker` of the marker for the requirement. Can be `None`.
+ > * `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 an `options` parameter to override the regex used to skip requirements lines.
+ > Optionally takes an `include_invalid` parameter to return an `UnparsedRequirement` in the event that a requirement cannot be parsed correctly.
+ > Optionally takes a `strict_hashes` parameter to require that all requirements have associated hashes.
+
+### Available with `pip>=8.0.0`:
+* `pip_api.hash(filename, algorithm='sha256')`
+ > Returns the resulting as a string.
+ > Valid `algorithm` parameters are `'sha256'`, `'sha384'`, and `'sha512'`
+
+### Available with `pip>=19.2`:
+* `pip_api.installed_distributions(local=False, paths=[])`
+ > As described above, but with an extra optional `paths` parameter to provide a list of locations to look for installed distributions. Attempting to use the `paths` parameter with `pip<19.2` will result in a `PipError`.
+
+## Use cases
+This library is in use by a number of other tools, including:
+* [`pip-audit`](https://pypi.org/project/pip-audit/), to analyze dependencies for known vulnerabilities
+* [`pytest-reqs`](https://pypi.org/project/pytest-reqs), to compare requirements files with test dependencies
+* [`hashin`](https://pypi.org/project/hashin/), to add hash pinning to requirements files
+* ...and many more.
+
+
+%package -n python3-pip-api
+Summary: An unofficial, importable pip API
+Provides: python-pip-api
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-pip-api
+
+<!--- BADGES: START --->
+[![GitHub - License](https://img.shields.io/github/license/di/pip-api?logo=github&style=flat&color=green)][#github-license]
+[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pip-api?logo=pypi&style=flat&color=blue)][#pypi-package]
+[![PyPI - Package Version](https://img.shields.io/pypi/v/pip-api?logo=pypi&style=flat&color=orange)][#pypi-package]
+[![Conda - Platform](https://img.shields.io/conda/pn/conda-forge/pip-api?logo=anaconda&style=flat)][#conda-forge-package]
+[![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/pip-api?logo=anaconda&style=flat&color=orange)][#conda-forge-package]
+[![Conda Recipe](https://img.shields.io/static/v1?logo=conda-forge&style=flat&color=green&label=recipe&message=pip-api)][#conda-forge-feedstock]
+
+[#github-license]: https://github.com/di/pip-api/blob/master/LICENSE
+[#pypi-package]: https://pypi.org/project/pip-api/
+[#conda-forge-package]: https://anaconda.org/conda-forge/pip-api
+[#conda-forge-feedstock]: https://github.com/conda-forge/pip-api-feedstock
+<!--- BADGES: END --->
+
+Since [`pip`](https://pypi.org/p/pip) is a command-line-tool, [it does not have
+an official, supported, _importable_
+API](https://pip.pypa.io/en/latest/user_guide/#using-pip-from-your-program).
+
+However, this does not mean that people haven't tried to `import pip`, usually
+to end up with much headache when `pip`'s maintainers do routine refactoring.
+
+## Goal
+The goal of this project is to provide an importable `pip` API, which is _fully
+compliant_ with the recommended method of using `pip` from your program.
+
+How? By providing an importable API that wraps command-line calls to `pip`,
+this library can be used as a drop-in replacement for existing uses of `pip`'s
+internal API.
+
+### Scope
+This goal means that any new API added here must have the following
+equivalents:
+
+- some internal `pip` API (or combination of internal APIs)
+- some CLI calls (or combination of CLI calls)
+
+Any functionality that is not currently possible from internal `pip` API or
+CLI calls is out of scope.
+
+## Installation
+
+You can install `pip-api` with either `pip` or with `conda`.
+
+**With pip**:
+
+```sh
+python -m pip install pip-api
+```
+
+**With conda**:
+
+```sh
+conda install -c conda-forge pip-api
+```
+
+## Supported Commands
+
+Not all commands are supported in all versions of `pip` and on all platforms.
+If the command you are trying to use is not compatible, `pip_api` will raise a
+`pip_api.exceptions.Incompatible` exception for your program to catch.
+
+### Available with all `pip` versions:
+* `pip_api.version()`
+ > Returns the `pip` version as a string, e.g. `"9.0.1"`
+
+* `pip_api.installed_distributions(local=False)`
+ > Returns a list of all installed distributions as a `Distribution` object with the following attributes:
+ > * `Distribution.name` (`string`): The name of the installed distribution
+ > * `Distribution.version` ([`packaging.version.Version`](https://packaging.pypa.io/en/latest/version/#packaging.version.Version)): The version of the installed distribution
+ > * `Distribution.location` (`string`): The location of the installed distribution
+ > * `Distribution.editable` (`bool`): Whether the distribution is editable or not
+ > Optionally takes a `local` parameter to filter out globally-installed packages
+
+* `pip_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 a `pip_api.Requirement` object (subclass of [`packaging.requirements.Requirement`](https://packaging.pypa.io/en/latest/requirements/#packaging.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`](https://packaging.pypa.io/en/latest/specifiers/#packaging.specifiers.SpecifierSet)): A `SpecifierSet` of the version specified by the requirement.
+ > * `Requirement.marker` ([`packaging.markers.Marker`](https://packaging.pypa.io/en/latest/markers/#packaging.markers.Marker)): A `Marker` of the marker for the requirement. Can be `None`.
+ > * `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 an `options` parameter to override the regex used to skip requirements lines.
+ > Optionally takes an `include_invalid` parameter to return an `UnparsedRequirement` in the event that a requirement cannot be parsed correctly.
+ > Optionally takes a `strict_hashes` parameter to require that all requirements have associated hashes.
+
+### Available with `pip>=8.0.0`:
+* `pip_api.hash(filename, algorithm='sha256')`
+ > Returns the resulting as a string.
+ > Valid `algorithm` parameters are `'sha256'`, `'sha384'`, and `'sha512'`
+
+### Available with `pip>=19.2`:
+* `pip_api.installed_distributions(local=False, paths=[])`
+ > As described above, but with an extra optional `paths` parameter to provide a list of locations to look for installed distributions. Attempting to use the `paths` parameter with `pip<19.2` will result in a `PipError`.
+
+## Use cases
+This library is in use by a number of other tools, including:
+* [`pip-audit`](https://pypi.org/project/pip-audit/), to analyze dependencies for known vulnerabilities
+* [`pytest-reqs`](https://pypi.org/project/pytest-reqs), to compare requirements files with test dependencies
+* [`hashin`](https://pypi.org/project/hashin/), to add hash pinning to requirements files
+* ...and many more.
+
+
+%package help
+Summary: Development documents and examples for pip-api
+Provides: python3-pip-api-doc
+%description help
+
+<!--- BADGES: START --->
+[![GitHub - License](https://img.shields.io/github/license/di/pip-api?logo=github&style=flat&color=green)][#github-license]
+[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pip-api?logo=pypi&style=flat&color=blue)][#pypi-package]
+[![PyPI - Package Version](https://img.shields.io/pypi/v/pip-api?logo=pypi&style=flat&color=orange)][#pypi-package]
+[![Conda - Platform](https://img.shields.io/conda/pn/conda-forge/pip-api?logo=anaconda&style=flat)][#conda-forge-package]
+[![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/pip-api?logo=anaconda&style=flat&color=orange)][#conda-forge-package]
+[![Conda Recipe](https://img.shields.io/static/v1?logo=conda-forge&style=flat&color=green&label=recipe&message=pip-api)][#conda-forge-feedstock]
+
+[#github-license]: https://github.com/di/pip-api/blob/master/LICENSE
+[#pypi-package]: https://pypi.org/project/pip-api/
+[#conda-forge-package]: https://anaconda.org/conda-forge/pip-api
+[#conda-forge-feedstock]: https://github.com/conda-forge/pip-api-feedstock
+<!--- BADGES: END --->
+
+Since [`pip`](https://pypi.org/p/pip) is a command-line-tool, [it does not have
+an official, supported, _importable_
+API](https://pip.pypa.io/en/latest/user_guide/#using-pip-from-your-program).
+
+However, this does not mean that people haven't tried to `import pip`, usually
+to end up with much headache when `pip`'s maintainers do routine refactoring.
+
+## Goal
+The goal of this project is to provide an importable `pip` API, which is _fully
+compliant_ with the recommended method of using `pip` from your program.
+
+How? By providing an importable API that wraps command-line calls to `pip`,
+this library can be used as a drop-in replacement for existing uses of `pip`'s
+internal API.
+
+### Scope
+This goal means that any new API added here must have the following
+equivalents:
+
+- some internal `pip` API (or combination of internal APIs)
+- some CLI calls (or combination of CLI calls)
+
+Any functionality that is not currently possible from internal `pip` API or
+CLI calls is out of scope.
+
+## Installation
+
+You can install `pip-api` with either `pip` or with `conda`.
+
+**With pip**:
+
+```sh
+python -m pip install pip-api
+```
+
+**With conda**:
+
+```sh
+conda install -c conda-forge pip-api
+```
+
+## Supported Commands
+
+Not all commands are supported in all versions of `pip` and on all platforms.
+If the command you are trying to use is not compatible, `pip_api` will raise a
+`pip_api.exceptions.Incompatible` exception for your program to catch.
+
+### Available with all `pip` versions:
+* `pip_api.version()`
+ > Returns the `pip` version as a string, e.g. `"9.0.1"`
+
+* `pip_api.installed_distributions(local=False)`
+ > Returns a list of all installed distributions as a `Distribution` object with the following attributes:
+ > * `Distribution.name` (`string`): The name of the installed distribution
+ > * `Distribution.version` ([`packaging.version.Version`](https://packaging.pypa.io/en/latest/version/#packaging.version.Version)): The version of the installed distribution
+ > * `Distribution.location` (`string`): The location of the installed distribution
+ > * `Distribution.editable` (`bool`): Whether the distribution is editable or not
+ > Optionally takes a `local` parameter to filter out globally-installed packages
+
+* `pip_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 a `pip_api.Requirement` object (subclass of [`packaging.requirements.Requirement`](https://packaging.pypa.io/en/latest/requirements/#packaging.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`](https://packaging.pypa.io/en/latest/specifiers/#packaging.specifiers.SpecifierSet)): A `SpecifierSet` of the version specified by the requirement.
+ > * `Requirement.marker` ([`packaging.markers.Marker`](https://packaging.pypa.io/en/latest/markers/#packaging.markers.Marker)): A `Marker` of the marker for the requirement. Can be `None`.
+ > * `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 an `options` parameter to override the regex used to skip requirements lines.
+ > Optionally takes an `include_invalid` parameter to return an `UnparsedRequirement` in the event that a requirement cannot be parsed correctly.
+ > Optionally takes a `strict_hashes` parameter to require that all requirements have associated hashes.
+
+### Available with `pip>=8.0.0`:
+* `pip_api.hash(filename, algorithm='sha256')`
+ > Returns the resulting as a string.
+ > Valid `algorithm` parameters are `'sha256'`, `'sha384'`, and `'sha512'`
+
+### Available with `pip>=19.2`:
+* `pip_api.installed_distributions(local=False, paths=[])`
+ > As described above, but with an extra optional `paths` parameter to provide a list of locations to look for installed distributions. Attempting to use the `paths` parameter with `pip<19.2` will result in a `PipError`.
+
+## Use cases
+This library is in use by a number of other tools, including:
+* [`pip-audit`](https://pypi.org/project/pip-audit/), to analyze dependencies for known vulnerabilities
+* [`pytest-reqs`](https://pypi.org/project/pytest-reqs), to compare requirements files with test dependencies
+* [`hashin`](https://pypi.org/project/hashin/), to add hash pinning to requirements files
+* ...and many more.
+
+
+%prep
+%autosetup -n pip-api-0.0.30
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-pip-api -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Mon Apr 10 2023 Python_Bot <Python_Bot@openeuler.org> - 0.0.30-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..a57265e
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+3eb94a0693a4f4063d2782870a39a02f pip-api-0.0.30.tar.gz