Current File : /home/inlingua/miniconda3/lib/python3.1/site-packages/conda/cli/main_init.py |
# Copyright (C) 2012 Anaconda, Inc
# SPDX-License-Identifier: BSD-3-Clause
"""CLI implementation for `conda init`.
Prepares the user's profile for running conda, and sets up the conda shell interface.
"""
from __future__ import annotations
from argparse import SUPPRESS
from logging import getLogger
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from argparse import ArgumentParser, Namespace, _SubParsersAction
log = getLogger(__name__)
def configure_parser(sub_parsers: _SubParsersAction, **kwargs) -> ArgumentParser:
from ..auxlib.ish import dals
from ..base.constants import COMPATIBLE_SHELLS
from ..common.compat import on_win
from ..common.constants import NULL
from .helpers import add_parser_json
summary = "Initialize conda for shell interaction."
description = summary
epilog = dals(
"""
Key parts of conda's functionality require that it interact directly with the shell
within which conda is being invoked. The `conda activate` and `conda deactivate` commands
specifically are shell-level commands. That is, they affect the state (e.g. environment
variables) of the shell context being interacted with. Other core commands, like
`conda create` and `conda install`, also necessarily interact with the shell environment.
They're therefore implemented in ways specific to each shell. Each shell must be configured
to make use of them.
This command makes changes to your system that are specific and customized for each shell.
To see the specific files and locations on your system that will be affected before, use
the '--dry-run' flag. To see the exact changes that are being or will be made to each
location, use the '--verbose' flag.
IMPORTANT: After running `conda init`, most shells will need to be closed and restarted for
changes to take effect.
"""
)
p = sub_parsers.add_parser(
"init",
help=summary,
description=description,
epilog=epilog,
**kwargs,
)
p.add_argument(
"--dev",
action="store_true",
help=SUPPRESS,
default=NULL,
)
p.add_argument(
"--all",
action="store_true",
help="Initialize all currently available shells.",
default=NULL,
)
setup_type_group = p.add_argument_group("setup type")
setup_type_group.add_argument(
"--install",
action="store_true",
help=SUPPRESS,
default=NULL,
)
setup_type_group.add_argument(
"--user",
action="store_true",
dest="user",
help="Initialize conda for the current user (default).",
default=True,
)
setup_type_group.add_argument(
"--no-user",
action="store_false",
dest="user",
help="Don't initialize conda for the current user.",
)
setup_type_group.add_argument(
"--system",
action="store_true",
help="Initialize conda for all users on the system.",
default=NULL,
)
setup_type_group.add_argument(
"--reverse",
action="store_true",
help="Undo effects of last conda init.",
default=NULL,
)
p.add_argument(
"shells",
nargs="*",
choices=COMPATIBLE_SHELLS,
metavar="SHELLS",
help=(
"One or more shells to be initialized. If not given, the default value is 'bash' on "
"unix and 'cmd.exe' & 'powershell' on Windows. Use the '--all' flag to initialize all "
f"shells. Available shells: {sorted(COMPATIBLE_SHELLS)}"
),
default=["cmd.exe", "powershell"] if on_win else ["bash"],
)
if on_win:
p.add_argument(
"--anaconda-prompt",
action="store_true",
help="Add an 'Anaconda Prompt' icon to your desktop.",
default=NULL,
)
add_parser_json(p)
p.add_argument(
"-d",
"--dry-run",
action="store_true",
help="Only display what would have been done.",
)
p.set_defaults(func="conda.cli.main_init.execute")
return p
def execute(args: Namespace, parser: ArgumentParser) -> int:
from ..base.constants import COMPATIBLE_SHELLS
from ..base.context import context
from ..common.compat import on_win
from ..core.initialize import initialize, initialize_dev, install
from ..exceptions import ArgumentError
if args.install:
return install(context.conda_prefix)
selected_shells: tuple[str, ...]
if args.all:
selected_shells = COMPATIBLE_SHELLS
else:
selected_shells = tuple(args.shells)
if args.dev:
if len(selected_shells) != 1:
raise ArgumentError("--dev can only handle one shell at a time right now")
return initialize_dev(selected_shells[0])
else:
for_user = args.user and not args.system
anaconda_prompt = on_win and args.anaconda_prompt
return initialize(
context.conda_prefix,
selected_shells,
for_user,
args.system,
anaconda_prompt,
args.reverse,
)