Skip to main content

Quick environment solver

Project description

mungo

IMPORTANT WARNING mungo is experimental, things are very likely to break.

mungo acts as a drop-in replacement for conda create and conda install - but with way faster environment resolution. The improvements in speed are achieved by employing linear programming instead of sat-solving and caching of intermediate results (see "The ILP" for more information).

Note that we do not want to replace conda - we merely wish to share our solution so that it can be tested and perhaps someday be integrated into conda itself.

Caveats

  • mungo only exposes basic functionality:
    • install (package_spec)+ (--name NAME)? (--channel CHANNEL)* (--file FILE)?
    • create  (package_spec)* (--name NAME)? (--channel CHANNEL)* (--file FILE)?
  • mungo's solutions will not be the same as conda's.
  • mungo cannot handle custom channel urls. Any channel which has repodata.json.bz2 files available from https://conda.anaconda.org/CHANNEL/ARCH is fine, though.
  • mungo only reads channels from ~/.condarc (but also uses the --channel arguments, if supplied, of course).
  • mungo only supports linux at the moment.

Installation

You need a working conda installation, since actual package installation is delegated to conda.

from PIP

pip install mungo

Examples

# create an environment named 'foo' with the specified packages
mungo create -n foo "python>=3.7" pulp packaging pyyaml

# create an environment from an environment file (such as mungo.yml)
mungo create --file mungo.yml

# install packages into the current environment
mungo install bwa

# install packages into a different environment
mungo install -n foo bwa

The ILP

mungo uses an integer linear program to determine a configuration of compatible packages which maximizes version numbers while also keeping channel order in mind.

alt text

After merging, ILP variables ∈ {0, 1} are created for each p-node. These variables relate to (package, version) configurations and tell us whether a configuration is selected for installation (1) or not (0). In a second step, the following ILP constraints are generated from the constrain nodes defined above: For each parent p (variable), the sum of all children (variables) C must be greater or equal to p; in other words: If p is selected, at least one available version of each dependent package must also be selected. If p is not selected for installation (i.e. p = 0), installation status of its dependencies is not relevant (for p).

alt text

alt text

Changelog

  • version 0.1.4: Show packages that get updated/downgraded/installed.
  • version 0.1.3: Prioritize channels over version numbers. Add '-y/--yes' flag to skip package installation confirmation.
  • version 0.1.0: Initial version.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mungo-0.6.1.tar.gz (27.4 kB view details)

Uploaded Source

File details

Details for the file mungo-0.6.1.tar.gz.

File metadata

  • Download URL: mungo-0.6.1.tar.gz
  • Upload date:
  • Size: 27.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.4.2 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.3

File hashes

Hashes for mungo-0.6.1.tar.gz
Algorithm Hash digest
SHA256 13d0fdd0e5a2a18ebd29c7598f8e984c580c0bbdc53f5967fb5b9d25ffe52fce
MD5 91fd11cd9fadf8a136bb2d22728b9e5d
BLAKE2b-256 8355da83175e208355314ee9022f69ff731f519d0e50818ee029f7fcb2e1b66c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page