DOC: Fixup python-api docs slightly (#2285)

* DOC: Fixup python-api docs slightly

* DOC: Fixup imports

Co-authored-by: Wolf Vollprecht <w.vollprecht@gmail.com>

* DOC: Add a little more text

---------

Co-authored-by: Wolf Vollprecht <w.vollprecht@gmail.com>
This commit is contained in:
Rohit Goswami 2023-07-03 07:40:49 +00:00 committed by GitHub
parent c491f1c52c
commit a42baafb92
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 24 additions and 22 deletions

View File

@ -17,26 +17,28 @@ Mamba provides high-level Python APIs for creating environments and installing p
# install(env_name, packages, channels)
install('my-custom-env', ('matplotlib=3', 'ipympl'), ('conda-forge', ))
These call internal ``mamba`` APIs under the hood, which are discussed below.
Using internal mamba APIs
-------------------------
The core of ``mamba`` is written in C++, but we expose the internals of mamba with a Python API (using ``pybind11``).
You can import the ``mamba_api`` using ``from mamba import mamba_api``.
You can import ``libmambapy`` containing the Python API using ``import libmambapy`` without having ``mamba`` installed.
The mamba_api exposes the following objects:
These bindings expose the following objects (`boa_` has a full example):
- ``Context``: a singleton configuration object. All global configuration goes through this. From Python you can use the context object like so:
.. code::
from mamba import mamba_api
mamba_api.Context().prefix_params.conda_prefix = "/home/wolfv/conda"
ctx = mamba_api.Context()
print(ctx.prefix_params.root_prefix)
import libmambapy
libmambapy.Context().conda_prefix = "/home/wolfv/conda"
ctx = libmambapy.Context()
print(ctx.root_prefix)
Here is an example usage of the mamba_api:
Here is an example usage of the libmambapy:
.. code::
@ -52,7 +54,7 @@ Here is an example usage of the mamba_api:
):
check_allowlist(channel_urls)
dlist = mamba_api.DownloadTargetList()
dlist = libmambapy.DownloadTargetList()
index = []
for idx, url in enumerate(channel_urls):
@ -68,12 +70,12 @@ Here is an example usage of the mamba_api:
name_and_subdir = channel.subdir
else:
name_and_subdir = channel.name + "/" + channel.subdir
sd = mamba_api.SubdirData(name_and_subdir, full_url, full_path_cache)
sd = libmambapy.SubdirData(name_and_subdir, full_url, full_path_cache)
index.append((sd, channel))
dlist.add(sd)
is_downloaded = dlist.download(mamba_api.MAMBA_DOWNLOAD_FAILFAST)
is_downloaded = dlist.download(libmambapy.MAMBA_DOWNLOAD_FAILFAST)
if not is_downloaded:
raise RuntimeError("Error downloading repodata.")
@ -83,21 +85,21 @@ Here is an example usage of the mamba_api:
class MambaSolver:
def __init__(self, prefix, channels, platform):
api_ctx = mamba_api.Context()
api_ctx.prefix_params.conda_prefix = prefix
api_ctx = libmambapy.Context()
api_ctx.conda_prefix = prefix
self.channels = channels
self.platform = platform
self.index = get_index(channels, platform=platform)
self.local_index = []
self.pool = mamba_api.Pool()
self.pool = libmambapy.Pool()
self.repos = []
start_prio = len(channels)
priority = start_prio
subpriority = 0 # wrong! :)
for subdir, channel in self.index:
repo = mamba_api.Repo(
repo = libmambapy.Repo(
self.pool,
str(channel),
subdir.cache_path(),
@ -122,11 +124,11 @@ Here is an example usage of the mamba_api:
solvable : bool
True if the set of specs has a solution, False otherwise.
"""
solver_options = [(mamba_api.SOLVER_FLAG_ALLOW_DOWNGRADE, 1)]
api_solver = mamba_api.Solver(self.pool, solver_options)
solver_options = [(libmambapy.SOLVER_FLAG_ALLOW_DOWNGRADE, 1)]
api_solver = libmambapy.Solver(self.pool, solver_options)
_specs = specs
api_solver.add_jobs(_specs, mamba_api.SOLVER_INSTALL)
api_solver.add_jobs(_specs, libmambapy.SOLVER_INSTALL)
success = api_solver.try_solve()
if not success:
@ -142,12 +144,12 @@ Here is an example usage of the mamba_api:
print(error_string)
exit(1)
package_cache = mamba_api.MultiPackageCache(pkgs_dirs)
package_cache = libmambapy.MultiPackageCache(pkgs_dirs)
t = mamba_api.Transaction(api_solver, package_cache)
t = libmambapy.Transaction(api_solver, package_cache)
return t
``mamba.api`` also has a default implementation of ``MambaSolver`` which can be
customized with ``Context`` objects.
Let's walk through this example:
We first use the ``get_index`` method to download repository data from the channels.
.. _boa: https://www.github.com/mamba-org/boa/blob/main/boa/core/solver.py