Current File : /home/inlingua/miniconda3/lib/python3.12/site-packages/conda/cli/main_export.py |
# Copyright (C) 2012 Anaconda, Inc
# SPDX-License-Identifier: BSD-3-Clause
"""CLI implementation for `conda export`.
Dumps specified environment package specifications to the screen.
"""
from argparse import (
ArgumentParser,
Namespace,
_SubParsersAction,
)
from ..common.configuration import YAML_EXTENSIONS
from ..exceptions import CondaValueError
def configure_parser(sub_parsers: _SubParsersAction, **kwargs) -> ArgumentParser:
from ..auxlib.ish import dals
from .helpers import add_parser_json, add_parser_prefix
summary = "Export a given environment"
description = summary
epilog = dals(
"""
Examples::
conda export
conda export --file FILE_NAME
"""
)
p = sub_parsers.add_parser(
"export",
help=summary,
description=description,
epilog=epilog,
**kwargs,
)
p.add_argument(
"-c",
"--channel",
action="append",
help="Additional channel to include in the export",
)
p.add_argument(
"--override-channels",
action="store_true",
help="Do not include .condarc channels",
)
add_parser_prefix(p)
p.add_argument(
"-f",
"--file",
default=None,
required=False,
help=(
"File name or path for the exported environment. "
"Note: This will silently overwrite any existing file "
"of the same name in the current directory."
),
)
p.add_argument(
"--no-builds",
default=False,
action="store_true",
required=False,
help="Remove build specification from dependencies",
)
p.add_argument(
"--ignore-channels",
default=False,
action="store_true",
required=False,
help="Do not include channel names with package names.",
)
add_parser_json(p)
p.add_argument(
"--from-history",
default=False,
action="store_true",
required=False,
help="Build environment spec from explicit specs in history",
)
p.set_defaults(func="conda.cli.main_export.execute")
return p
# TODO Make this aware of channels that were used to install packages
def execute(args: Namespace, parser: ArgumentParser) -> int:
from ..base.context import context, determine_target_prefix, env_name
from ..env.env import from_environment
from .common import stdout_json
prefix = determine_target_prefix(context, args)
env = from_environment(
env_name(prefix),
prefix,
no_builds=args.no_builds,
ignore_channels=args.ignore_channels,
from_history=args.from_history,
)
if args.override_channels:
env.remove_channels()
if args.channel is not None:
env.add_channels(args.channel)
if args.file:
filename = args.file
# check for the proper file extension; otherwise when the export file is used later,
# the user will get a file parsing error
if not filename.endswith(YAML_EXTENSIONS):
raise CondaValueError(
f"Export files must have a valid extension {YAML_EXTENSIONS}: {filename}"
)
with open(args.file, "w") as fp:
env.to_yaml(stream=fp)
if args.json:
stdout_json(env.to_dict())
else:
print(env.to_yaml(), end="")
return 0