Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if newenv and not args.no_default_packages:
# Override defaults if they are specified at the command line
# TODO: rework in 4.4 branch using MatchSpec
args_packages_names = [pkg.replace(' ', '=').split('=', 1)[0] for pkg in args_packages]
for default_pkg in context.create_default_packages:
default_pkg_name = default_pkg.replace(' ', '=').split('=', 1)[0]
if default_pkg_name not in args_packages_names:
args_packages.append(default_pkg)
num_cp = sum(s.endswith('.tar.bz2') for s in args_packages)
if num_cp:
if num_cp == len(args_packages):
explicit(args_packages, prefix, verbose=not context.quiet)
return
else:
raise CondaValueError("cannot mix specifications with conda package"
" filenames")
index = get_index(channel_urls=index_args['channel_urls'],
prepend=index_args['prepend'], platform=None,
use_local=index_args['use_local'], use_cache=index_args['use_cache'],
unknown=index_args['unknown'], prefix=prefix)
channel_json = []
for x in index:
# add priority here
if x.channel.name in index_args['channel_urls']:
priority = len(index_args['channel_urls']) - index_args['channel_urls'].index(x.channel.name)
else:
priority = 0
subpriority = 0 if x.channel.platform == 'noarch' else 1
specs.extend(d.quad[0] for d in linked_dists)
specs.extend(common.specs_from_args(args_packages, json=context.json))
if isinstall and args.revision:
get_revision(args.revision, json=context.json)
elif isinstall and not (args.file or args_packages):
raise CondaValueError("too few arguments, "
"must supply command line package specs or --file")
num_cp = sum(s.endswith('.tar.bz2') for s in args_packages)
if num_cp:
if num_cp == len(args_packages):
explicit(args_packages, prefix, verbose=not context.quiet)
return
else:
raise CondaValueError("cannot mix specifications with conda package"
" filenames")
if newenv and args.clone:
if args.packages:
raise TooManyArgumentsError(0, len(args.packages), list(args.packages),
'did not expect any arguments for --clone')
clone(args.clone, prefix, json=context.json, quiet=context.quiet, index_args=index_args)
append_env(prefix)
touch_nonadmin(prefix)
if not context.json and not context.quiet:
print(print_activate(args.name if args.name else prefix))
return
index = get_index(channel_urls=index_args['channel_urls'],
prepend=index_args['prepend'], platform=None,
def __init__(self, message, *args):
msg = '%s' % message
super(CondaValueError, self).__init__(msg)
def check_prefix(prefix, json=False):
name = basename(prefix)
error = None
if name.startswith('.'):
error = "environment name cannot start with '.': %s" % name
if name == ROOT_ENV_NAME:
error = "'%s' is a reserved environment name" % name
if exists(prefix):
if isdir(prefix) and 'conda-meta' not in os.listdir(prefix):
return None
error = "prefix already exists: %s" % prefix
if error:
raise CondaValueError(error, json)
if ' ' in prefix:
stderr.warn("WARNING: A space was detected in your requested environment path\n"
"'%s'\n"
"Spaces in paths can sometimes be problematic." % prefix)
with TmpDownload(url, verbose=False) as path:
specs = []
try:
for line in open(path):
line = line.strip()
if not line or line.startswith('#'):
continue
if line == '@EXPLICIT':
explicit = True
if explicit:
specs.append(line)
continue
spec = spec_from_line(line)
if spec is None:
from ..exceptions import CondaValueError
raise CondaValueError("could not parse '%s' in: %s" %
(line, url))
specs.append(spec)
except IOError as e:
from ..exceptions import CondaFileIOError
raise CondaFileIOError(path, e)
return specs
ordered = sorted(set(item for item, dep in data.items() if len(dep) == 0))
if not ordered:
break
for item in ordered:
yield item
data.pop(item, None)
for dep in sorted(data.values()):
dep -= set(ordered)
if len(data) != 0:
from ..exceptions import CondaValueError
msg = 'Cyclic dependencies exist among these items: {}'
raise CondaValueError(msg.format(' -> '.join(repr(x) for x in data.keys())))
"""
conda install, conda update, and conda create
"""
context.validate_configuration()
check_non_admin()
newenv = bool(command == 'create')
isupdate = bool(command == 'update')
isinstall = bool(command == 'install')
if newenv:
common.ensure_name_or_prefix(args, command)
prefix = context.prefix if newenv or args.mkdir else context.prefix_w_legacy_search
if newenv:
check_prefix(prefix, json=context.json)
if context.force_32bit and is_root_prefix(prefix):
raise CondaValueError("cannot use CONDA_FORCE_32BIT=1 in root env")
if isupdate and not (args.file or args.all or args.packages):
raise CondaValueError("""no package names supplied
# If you want to update to a newer version of Anaconda, type:
#
# $ conda update --prefix %s anaconda
""" % prefix)
args_packages = [s.strip('"\'') for s in args.packages]
linked_dists = install_linked(prefix)
linked_names = tuple(ld.quad[0] for ld in linked_dists)
if isupdate and not args.all:
for name in args_packages:
common.arg2spec(name, json=context.json, update=True)
if name not in linked_names and common.prefix_if_in_private_env(name) is None:
raise PackageNotInstalledError(prefix, name)
def prefix_from_arg(arg, shell):
shelldict = shells[shell] if shell else {}
from ..base.context import context
'Returns a platform-native path'
# MSYS2 converts Unix paths to Windows paths with unix seps
# so we must check for the drive identifier too.
if shelldict['sep'] in arg and not regex.match('[a-zA-Z]:', arg):
# strip is removing " marks, not \ - look carefully
native_path = shelldict['path_from'](arg)
if isdir(abspath(native_path.strip("\""))):
prefix = abspath(native_path.strip("\""))
else:
from ..exceptions import CondaValueError
raise CondaValueError('Could not find environment: %s' % native_path)
else:
prefix = locate_prefix_by_name(context, arg.replace('/', os.path.sep))
return prefix
def create(args, parser):
if is_conda_environment(context.target_prefix):
if paths_equal(context.target_prefix, context.root_prefix):
raise CondaValueError("The target prefix is the base prefix. Aborting.")
confirm_yn("WARNING: A conda environment already exists at '%s'\n"
"Remove existing environment" % context.target_prefix,
default='no',
dry_run=False)
log.info("Removing existing environment %s", context.target_prefix)
rm_rf(context.target_prefix)
elif isdir(context.target_prefix):
confirm_yn("WARNING: A directory already exists at the target location '%s'\n"
"but it is not a conda environment.\n"
"Continue creating environment" % context.target_prefix,
default='no',
dry_run=False)
install(args, parser, 'create')