Skip to main content

conda environment creation and update from meta.yaml

Project description

conda-env-manager: cenv

coverage PyPI version fury.io PyPI pyversions MIT license Documentation Status Powered by DepHell logo

Due to the redundant dependency information inside the meta.yaml (required to create the conda-package) and the environment.yml (as definition file for the conda-environment during development and for production), cenv (short form for conda-env-manager) was created to make the meta.yaml the only relevant file and to create and update conda-environment from the definition inside this meta.yaml. The name of the conda-environment to create / update is defined in the section extra and the variable env_name inside the meta.yaml.

The steps run by cenv:

  • creation of a backup if the environment already exists followed by the removal of the previous environment.

  • creation of the environment as defined in the meta.yaml. If any failures occurred during creation and the backup was created, the command to reset the backup-version can be used.

  • if enabled in the config file the environment.yml is exported after creation / update of the environment.

The usage of cenv reduces the conda commands to use to the following:

  • conda activate ... to activate the environment

  • conda deactivate to deactivate an environment

  • conda info to show information about the currently activated environment

  • conda search ... to search for availability of a package in the conda channels.

  • conda remove -n ... --all to remove an environment

  • cenv to create / update an environment

Documentation

For complete documentation see readthedocs.

Installation

Install cenv using pip:

pip install cenv_tool

Now run init_cenv to create the relevant config-files and add the autoactivate- and autoupdate-shell-function to your .bashrc / .zshrc.

autoactivate and autoupdate

Per default these features are deactivated, even if added to your shell by running init_cenv.

autoactivate-feature

The autoactivate-feature activates the conda-environment as named extra-section in the meta.yaml located at conda-build/meta.yaml, if the environment exists. To activate the autoactivate-features run:

autoactivate_toggle
autoupdate-feature

The autoupdate checks if the content of the meta.yaml changed. The current state is stored as a md5sum in conda-build/meta.md5. If it changed the cenv-process is called.

For the autoupdate-feature run:

autoupdate_toggle

Usage

All steps required to create or update the projects conda environment are run automatically running:

cenv

ATTENTION:

If you use cenv, each environment should only be created, updated and modified using cenv! This means the commands conda install, conda remove are not used anymore. Changes of the dependencies of the environment are defined inside the meta.yaml and are applied by using cenv.

This means:

  • new dependency required => add it in meta.yaml and run cenv.

  • dependency not needed anymore => remove it from meta.yaml and run cenv.

  • need of another version of dependency => change the version of dependency in meta.yaml and run cenv.

The required information about the projects conda environment are extracted from the meta.yaml. This meta.yaml should be located inside the project folder at ./conda-build/meta.yaml. The project-configuration is defined in the extra section of the meta.yaml. There you can define the name of the projects conda-environment at env_name. Also you can define requirements only needed during development but not to be included into the resulting conda package. These requirements have to be defined in the dev_requirements-section.

All other parts of the meta.yaml have to be defined as default.

A meta.yaml valid for cenv should look like the following:

{% set data = load_setup_py_data() %}

package:
    name: "example_package"
    version: {{ data.get("version") }}

source:
    path: ..

build:
    build: {{ environ.get('GIT_DESCRIBE_NUMBER', 0) }}
    preserve_egg_dir: True
    script: python -m pip install --no-deps --ignore-installed .

requirements:
    build:
      - python 3.6.8
      - pip
      - setuptools
    run:
      - python 3.6.8
      - attrs >=18.2
      - jinja2 >=2.10
      - ruamel.yaml >=0.15.23
      - six >=1.12.0
      - yaml >=0.1.7
      - marshmallow >=3.0.0rc1*

test:
    imports:
        - example_package

extra:
    env_name: example
    dev_requirements:
        - ipython >=7.2.0

ATTENTION:

In the requirements-run-section the minimal version of each package has to be defined! The same is required for the dev_requirements-section. Not defining a version will not create or update a conda-environment, because this is not the purpose of the conda-usage. The validity of the meta.yaml is checked in cenv using the marshmallow package. You can additionally add upper limits for the version like the following: - package >=0.1,<0.3

If cenv is run the environment is created / updated from the definition inside this meta.yaml. The creation of the backup of the previous environment ensures to undo changes if any error occurs during recreation of the environment.

ATTENTION:

cenv can only update the environment if it is not activated. So ensure the environment to be deactivated before running cenv.

Per default exporting the conda environment definition into an environment.yml is turned off. If you want to turn this functionality on you need to modify your ~/.config/cenv.yml as described in the configuration-part.

Example for the output of the cenv command:

On create:

Creating cenv_dev
   ├── Create environment
      └── Created
   ├── write md5sum of meta.yaml
      └── updated
   └── Done

On update:

Updating cenv_dev
   ├── Create backup
      └── Created
   ├── Remove existing env
      └── Removed
   ├── Create environment
      ├── Clear backup
         └── Cleared
      └── Created
   ├── write md5sum of meta.yaml
      └── updated
   └── Done

Development of cenv

To create the environment to develop cenv run the pre-commit hooks manually:

pyenv local 3.7.3
pre-commit run --all-files
poetry shell

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

cenv_tool-1.1.2.tar.gz (18.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cenv_tool-1.1.2-py3-none-any.whl (15.8 kB view details)

Uploaded Python 3

File details

Details for the file cenv_tool-1.1.2.tar.gz.

File metadata

  • Download URL: cenv_tool-1.1.2.tar.gz
  • Upload date:
  • Size: 18.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for cenv_tool-1.1.2.tar.gz
Algorithm Hash digest
SHA256 65c6cc3ed4f9c0426b6b32d195f2c6648b60635828614a38a1dfb35122f03465
MD5 6c66efc324b356b276aec8c9c734e12b
BLAKE2b-256 a8792ff4f4a516af5d1b292eac50439791988ef54c1b9c9ea36895be3d94f928

See more details on using hashes here.

File details

Details for the file cenv_tool-1.1.2-py3-none-any.whl.

File metadata

  • Download URL: cenv_tool-1.1.2-py3-none-any.whl
  • Upload date:
  • Size: 15.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for cenv_tool-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1bb2a646d6cbf3b85332bdbd7cf38f5366029edeacd04c47fd145e44d2f096fe
MD5 7216a87fddb3f0c7d8a2d9494b7a402e
BLAKE2b-256 47cc18031defa4adc382df0f838377e32a6c1459ac6558deea67c278ee087f3e

See more details on using hashes here.

Supported by

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