env_gen

Generate an environment.yml from an nbdev-style settings.ini

Reading Settings


read_settings


def read_settings(
    path:str, # Path to settings.ini file
)->configparser.ConfigParser: # Configured ConfigParser object

Read settings.ini file with percent-style interpolation.


get_section


def get_section(
    cp:configparser.ConfigParser, # ConfigParser object
):

Get configuration section from ConfigParser. nbdev puts keys at top-level (DEFAULT). Falls back to first section if present.

Utility Functions


split_list


def split_list(
    val:str=None, # String value to split (can be None)
)->List[str]: # List of unique, non-empty strings preserving order

Split space- and/or comma-separated lists while respecting quotes.


normalize_python_spec


def normalize_python_spec(
    min_py:str=None, # Minimum Python version string
)->str: # Normalized Python specification string or None

Normalize Python version specification for conda. Accepts “>=3.10”, “3.10”, “3.9.”, etc. If bare like “3.10”, makes it “>=3.10”.*

Configuration Collection


collect_values


def collect_values(
    cfg, # Configuration section dictionary - TODO: Add type hint
)->Tuple[str, List[str], List[str], List[str], List[str]]: # Tuple of (env_name, channels, conda_reqs, pip_reqs, dev_pip_reqs)

Collect configuration values from settings.

YAML Generation


emit_yaml


def emit_yaml(
    name:str, # Environment name
    channels:List[str], # List of conda channels
    conda_deps:List[str], # List of conda dependencies
    pip_lines:List[str], # List of pip packages
)->str: # YAML formatted string

Generate environment.yml content. Manual YAML emitter to avoid extra dependencies.

CLI Interface


main


def main(
    
):

Generate environment.yml from nbdev settings.ini.

Reads: lib_name, min_python, conda_channels, conda_requirements, requirements, dev_requirements (all optional). Writes: environment.yml (or stdout). Adds an editable pip install (-e “.[EXTRAS]”) by default.

Examples: python gen_env_from_settings.py python gen_env_from_settings.py –name myproj-dev –extras dev,docs –out env.yml python gen_env_from_settings.py –no-editable –stdout python gen_env_from_settings.py –no-include-pip-reqs