def execute(args, parser): prefix = common.get_prefix(args) regex = args.regex if args.full_name: regex = r'^%s$' % regex if args.revisions: from conda.history import History h = History(prefix) if isfile(h.path): if not args.json: h.print_log() else: common.stdout_json(h.object_log()) else: common.error_and_exit("No revision log found: %s\n" % h.path, json=args.json, error_type="NoRevisionLog") return if args.canonical: format = 'canonical' elif args.export: format = 'export' else: format = 'human' if args.json: format = 'canonical' exitcode = print_packages(prefix, regex, format, piplist=args.pip, json=args.json) sys.exit(exitcode)
def print_unexpected_error_message(e): traceback = format_exc() from conda.base.context import context if context.json: from conda.cli.common import stdout_json stdout_json(dict(error=traceback)) else: message = """\ An unexpected error has occurred. Please consider posting the following information to the conda GitHub issue tracker at: https://github.com/conda/conda/issues """ print(message) command = ' '.join(sys.argv) if ' info' not in command: # get and print `conda info` info_stdout, info_stderr = get_info() print(info_stdout if info_stdout else info_stderr) print("`$ {0}`".format(command)) print('\n') print('\n'.join(' ' + line for line in traceback.splitlines()))
def execute(args, parser): prefix = common.get_prefix(args) if args.revisions: from conda.history import History h = History(prefix) if isfile(h.path): if not args.json: h.print_log() else: common.stdout_json(h.object_log()) else: common.error_and_exit("No revision log found: %s\n" % h.path, json=args.json, error_type="NoRevisionLog") return if args.canonical: format = "canonical" elif args.export: format = "export" else: format = "human" if args.json: format = "canonical" print_packages(prefix, args.regex, format, piplist=args.pip, json=args.json)
def print_unexpected_error_message(e): # bomb = "\U0001F4A3 " # explosion = "\U0001F4A5 " # fire = "\U0001F525 " # print("%s %s %s" % (3*bomb, 3*explosion, 3*fire)) traceback = format_exc() stderrlogger = getLogger('stderr') from conda.base.context import context if context.json: from conda.cli.common import stdout_json stdout_json(dict(error=traceback)) else: message = """\ An unexpected error has occurred. Please consider posting the following information to the conda GitHub issue tracker at: https://github.com/conda/conda/issues """ stderrlogger.info(message) command = ' '.join(sys.argv) if ' info' not in command: # get and print `conda info` info_stdout, info_stderr = get_info() stderrlogger.info(info_stdout if info_stdout else info_stderr) stderrlogger.info("`$ {0}`".format(command)) stderrlogger.info('\n') stderrlogger.info('\n'.join(' ' + line for line in traceback.splitlines()))
def print_unexpected_error_message(e): traceback = format_exc() from conda.config import output_json if not output_json and e.__class__.__name__ not in ('ScannerError', 'ParserError'): message = """\ An unexpected error has occurred. Please consider posting the following information to the conda GitHub issue tracker at: https://github.com/conda/conda/issues """ else: message = '' print(message) info_stdout, info_stderr = get_info() print(info_stdout if info_stdout else info_stderr) print("`$ {0}`".format(' '.join(sys.argv))) print('\n') if output_json: from conda.cli.common import stdout_json stdout_json(dict(error=traceback)) else: print('\n'.join(' ' + line for line in traceback.splitlines()))
def print_packages(prefix, regex=None, format='human', piplist=False, json=False): if not isdir(prefix): common.error_and_exit("""\ Error: environment does not exist: %s # # Use 'conda create' to create an environment before listing its packages.""" % prefix, json=json, error_type="NoEnvironmentFound") if not json: if format == 'human': print('# packages in environment at %s:' % prefix) print('#') if format == 'export': print_export_header() installed = install.linked(prefix) if piplist and config.use_pip and format == 'human': add_pip_installed(prefix, installed, json=json) exitcode, output = list_packages(prefix, installed, regex, format=format) if not json: print('\n'.join(output)) else: common.stdout_json(output) sys.exit(exitcode)
def print_packages( prefix, regex=None, format="human", piplist=False, json=False, show_channel_urls=config.show_channel_urls ): if not isdir(prefix): common.error_and_exit( """\ Error: environment does not exist: %s # # Use 'conda create' to create an environment before listing its packages.""" % prefix, json=json, error_type="NoEnvironmentFound", ) if not json: if format == "human": print("# packages in environment at %s:" % prefix) print("#") if format == "export": print_export_header() installed = install.linked(prefix) if piplist and config.use_pip and format == "human": add_pip_installed(prefix, installed, json=json) exitcode, output = list_packages(prefix, installed, regex, format=format, show_channel_urls=show_channel_urls) if not json: print("\n".join(output)) else: common.stdout_json(output) return exitcode
def execute(args, parser): prefix = common.get_prefix(args) regex = args.regex if args.full_name: regex = r'^%s$' % regex if args.revisions: from conda.history import History h = History(prefix) if isfile(h.path): if not args.json: h.print_log() else: common.stdout_json(h.object_log()) else: common.error_and_exit("No revision log found: %s\n" % h.path, json=args.json, error_type="NoRevisionLog") return if args.canonical: format = 'canonical' elif args.export: format = 'export' else: format = 'human' if args.json: format = 'canonical' print_packages(prefix, regex, format, piplist=args.pip, json=args.json)
def print_unexpected_error_message(e): traceback = format_exc() from conda.config import output_json if output_json: from conda.cli.common import stdout_json stdout_json(dict(error=traceback)) else: message = """\ An unexpected error has occurred. Please consider posting the following information to the conda GitHub issue tracker at: https://github.com/conda/conda/issues """ print(message) command = ' '.join(sys.argv) if ' info' not in command: # get and print `conda info` info_stdout, info_stderr = get_info() print(info_stdout if info_stdout else info_stderr) print("`$ {0}`".format(command)) print('\n') print('\n'.join(' ' + line for line in traceback.splitlines()))
def print_packages(prefix, regex=None, format='human', piplist=False, json=False): if not isdir(prefix): common.error_and_exit("""\ Error: environment does not exist: %s # # Use 'conda create' to create an environment before listing its packages.""" % prefix, json=json, error_type="NoEnvironmentFound") if not json: if format == 'human': print('# packages in environment at %s:' % prefix) print('#') if format == 'export': print_export_header() installed = install.linked(prefix) if piplist and config.use_pip and format == 'human': add_pip_installed(prefix, installed, json=json) exitcode, output = list_packages(prefix, installed, regex, format=format) if not json: print('\n'.join(output)) else: common.stdout_json(output) return exitcode
def execute(args, parser): json_result = {'success': True} if args.lock or args.all: locks = list(find_lock()) json_result['lock'] = {'files': locks} rm_lock(locks, verbose=not args.json) if args.tarballs or args.all: pkgs_dirs, totalsize = find_tarballs() first = sorted(pkgs_dirs)[0] if pkgs_dirs else '' json_result['tarballs'] = { 'pkgs_dir': first, # Backwards compabitility 'pkgs_dirs': dict(pkgs_dirs), 'files': pkgs_dirs[first], # Backwards compatibility 'total_size': totalsize } rm_tarballs(args, pkgs_dirs, totalsize, verbose=not args.json) if args.index_cache or args.all: json_result['index_cache'] = { 'files': [join(config_pkgs_dirs[0], 'cache')] } rm_index_cache() if args.packages or args.all: pkgs_dirs, warnings, totalsize, pkgsizes = find_pkgs() first = sorted(pkgs_dirs)[0] if pkgs_dirs else '' json_result['packages'] = { 'pkgs_dir': first, # Backwards compatibility 'pkgs_dirs': dict(pkgs_dirs), 'files': pkgs_dirs[first], # Backwards compatibility 'total_size': totalsize, 'warnings': warnings, 'pkg_sizes': {i: dict(zip(pkgs_dirs[i], pkgsizes[i])) for i in pkgs_dirs}, } rm_pkgs(args, pkgs_dirs, warnings, totalsize, pkgsizes, verbose=not args.json) if args.source_cache or args.all: json_result['source_cache'] = find_source_cache() rm_source_cache(args, **json_result['source_cache']) if not any((args.lock, args.tarballs, args.index_cache, args.packages, args.source_cache, args.all)): common.error_and_exit( "One of {--lock, --tarballs, --index-cache, --packages, " "--source-cache, --all} required", error_type="ValueError") if args.json: common.stdout_json(json_result)
def execute(args, parser): json_result = { 'success': True } if args.lock or args.all: locks = list(find_lock()) json_result['lock'] = { 'files': locks } rm_lock(locks, verbose=not args.json) if args.tarballs or args.all: pkgs_dirs, totalsize = find_tarballs() first = sorted(pkgs_dirs)[0] if pkgs_dirs else '' json_result['tarballs'] = { 'pkgs_dir': first, # Backwards compabitility 'pkgs_dirs': dict(pkgs_dirs), 'files': pkgs_dirs[first], # Backwards compatibility 'total_size': totalsize } rm_tarballs(args, pkgs_dirs, totalsize, verbose=not args.json) if args.index_cache or args.all: json_result['index_cache'] = { 'files': [join(config.pkgs_dirs[0], 'cache')] } rm_index_cache() if args.packages or args.all: pkgs_dirs, warnings, totalsize, pkgsizes = find_pkgs() first = sorted(pkgs_dirs)[0] if pkgs_dirs else '' json_result['packages'] = { 'pkgs_dir': first, # Backwards compatibility 'pkgs_dirs': dict(pkgs_dirs), 'files': pkgs_dirs[first], # Backwards compatibility 'total_size': totalsize, 'warnings': warnings, 'pkg_sizes': {i: dict(zip(pkgs_dirs[i], pkgsizes[i])) for i in pkgs_dirs}, } rm_pkgs(args, pkgs_dirs, warnings, totalsize, pkgsizes, verbose=not args.json) if args.source_cache or args.all: json_result['source_cache'] = find_source_cache() rm_source_cache(args, **json_result['source_cache']) if not any((args.lock, args.tarballs, args.index_cache, args.packages, args.source_cache, args.all)): common.error_and_exit( "One of {--lock, --tarballs, --index-cache, --packages, " "--source-cache, --all} required", error_type="ValueError") if args.json: common.stdout_json(json_result)
def print_conda_exception(exception): from conda.base.context import context from conda.cli.common import stdout_json from sys import stderr message = repr(exception) if context.json: stdout_json(dict(error=message)) else: stderr.write(message)
def print_exception(exception): from conda.config import output_json from conda.cli.common import stdout_json from sys import stderr message = repr(exception) if output_json: stdout_json(dict(error=message)) else: stderr.write(message)
def execute(args, parser): if not args.package: parser.print_help() return import conda.install import conda.resolve from conda.api import get_package_versions, app_is_installed from conda.misc import launch prefix = common.get_prefix(args) if args.quiet: logging.disable(logging.CRITICAL) if args.package.endswith('.tar.bz2'): if app_is_installed(args.package, prefixes=[prefix]): fn = args.package else: error_message = "Package {} not installed.".format(args.package) common.error_and_exit(error_message, json=args.json, error_type="PackageNotInstalled") else: installed = [] for pkg in get_package_versions(args.package): if app_is_installed(pkg.fn, prefixes=[prefix]): installed.append(pkg) for pkg in conda.install.linked(prefix): name, version, build = pkg.rsplit('-', 2) if name == args.package: installed = [conda.resolve.Package(pkg + '.tar.bz2', conda.install.is_linked(prefix, pkg))] break if installed: package = max(installed) fn = package.fn try: subprocess = launch(fn, prefix=prefix, additional_args=args.arguments, background=args.json) if args.json: common.stdout_json(dict(fn=fn, pid=subprocess.pid)) elif not args.quiet: print("Started app. Some apps may take a while to finish loading.") except TypeError: execute_command(args.package, prefix, args.arguments, args.json) except Exception as e: common.exception_and_exit(e, json=args.json) else: # Try interpreting it as a command execute_command(args.package, prefix, args.arguments, args.json)
def execute(args, parser): json_result = {'success': True} if args.lock: locks = list(find_lock()) json_result['lock'] = {'files': locks} rm_lock(locks, verbose=not args.json) if args.tarballs: pkgs_dir, rmlist, totalsize = find_tarballs() json_result['tarballs'] = { 'pkgs_dir': pkgs_dir, 'files': rmlist, 'total_size': totalsize } rm_tarballs(args, pkgs_dir, rmlist, totalsize, verbose=not args.json) if args.index_cache: json_result['index_cache'] = { 'files': [join(config.pkgs_dirs[0], 'cache')] } rm_index_cache() if args.packages: pkgs_dir, rmlist, warnings, totalsize, pkgsizes = find_pkgs() json_result['packages'] = { 'pkgs_dir': pkgs_dir, 'files': rmlist, 'total_size': totalsize, 'warnings': warnings, 'pkg_sizes': dict(zip(rmlist, pkgsizes)) } rm_pkgs(args, pkgs_dir, rmlist, warnings, totalsize, pkgsizes, verbose=not args.json) if args.source_cache: json_result['source_cache'] = find_source_cache() rm_source_cache(args, **json_result['source_cache']) if not (args.lock or args.tarballs or args.index_cache or args.packages or args.source_cache): common.error_and_exit( "One of {--lock, --tarballs, --index-cache, --packages, --source-cache} required", error_type="ValueError") if args.json: common.stdout_json(json_result)
def execute_command(cmd, prefix, additional_args, json=False): from conda.misc import execute_in_environment try: process = execute_in_environment( cmd, prefix=prefix, additional_args=additional_args, inherit=not json) if not json: sys.exit(process.wait()) else: common.stdout_json(dict(cmd=cmd, pid=process.pid)) except OSError: error_message = "App {} not installed.".format(cmd) common.error_and_exit(error_message, json=json, error_type="AppNotInstalled")
def execute_list(args, parser): prefix = get_prefix(args, search=False) or context.active_prefix if not lexists(prefix): raise EnvironmentLocationNotFound(prefix) pd = PrefixData(prefix) env_vars = pd.get_environment_env_vars() if args.json: common.stdout_json(env_vars) else: for k, v in env_vars.items(): print('%s = %s' % (k, v))
def execute(args, parser): json_result = { 'success': True } if args.lock: locks = list(find_lock()) json_result['lock'] = { 'files': locks } rm_lock(locks, verbose=not args.json) if args.tarballs: pkgs_dir, rmlist, totalsize = find_tarballs() json_result['tarballs'] = { 'pkgs_dir': pkgs_dir, 'files': rmlist, 'total_size': totalsize } rm_tarballs(args, pkgs_dir, rmlist, totalsize, verbose=not args.json) if args.index_cache: json_result['index_cache'] = { 'files': [join(config.pkgs_dirs[0], 'cache')] } rm_index_cache() if args.packages: pkgs_dir, rmlist, warnings, totalsize, pkgsizes = find_pkgs() json_result['packages'] = { 'pkgs_dir': pkgs_dir, 'files': rmlist, 'total_size': totalsize, 'warnings': warnings, 'pkg_sizes': dict(zip(rmlist, pkgsizes)) } rm_pkgs(args, pkgs_dir, rmlist, warnings, totalsize, pkgsizes, verbose=not args.json) if args.source_cache: json_result['source_cache'] = find_source_cache() rm_source_cache(args, **json_result['source_cache']) if not (args.lock or args.tarballs or args.index_cache or args.packages or args.source_cache): common.error_and_exit( "One of {--lock, --tarballs, --index-cache, --packages, --source-cache} required", error_type="ValueError") if args.json: common.stdout_json(json_result)
def print_unexpected_error_message(e): from conda.config import output_json message = '' if e.__class__.__name__ not in ('ScannerError', 'ParserError'): message = """\ An unexpected error has occurred, please consider sending the following traceback to the conda GitHub issue tracker at: https://github.com/conda/conda/issues Include the output of the command 'conda info' in your report. """ print(message) import traceback if output_json: from conda.cli.common import stdout_json stdout_json(dict(error=traceback.format_exc())) else: traceback.print_exc()
def print_packages(prefix, regex=None, format='human', piplist=False, json=False, show_channel_urls=show_channel_urls): if not isdir(prefix): common.error_and_exit("""\ Error: environment does not exist: %s # # Use 'conda create' to create an environment before listing its packages.""" % prefix, json=json, error_type="NoEnvironmentFound") if not json: if format == 'human': print('# packages in environment at %s:' % prefix) print('#') if format == 'export': print_export_header() installed = install.linked(prefix) if piplist and use_pip and format == 'human': installed.update(get_egg_info(prefix)) exitcode, output = list_packages(prefix, installed, regex, format=format, show_channel_urls=show_channel_urls) if not json: print('\n'.join(output)) else: common.stdout_json(output) return exitcode
specs = common.specs_from_args(args.package_names) if (plan.is_root_prefix(prefix) and common.names_in_specs(common.root_no_rm, specs)): common.error_and_exit('cannot remove %s from root environment' % ', '.join(common.root_no_rm), json=args.json, error_type="CantRemoveFromRoot") actions = plan.remove_actions(prefix, specs, index=index, pinned=args.pinned) if plan.nothing_to_do(actions): if args.all: rm_rf(prefix) if args.json: common.stdout_json({ 'success': True, 'actions': actions }) return common.error_and_exit('no packages found to remove from ' 'environment: %s' % prefix, json=args.json, error_type="PackageNotInstalled") if not args.json: print() print("Package plan for package removal in environment %s:" % prefix) plan.display_actions(actions, index) if args.json and args.dry_run: common.stdout_json({ 'success': True,
def execute(args, parser): if args.args: for arg in args.args: if isfile(arg): from conda.misc import which_package path = arg for dist in which_package(path): print('%-50s %s' % (path, dist)) else: show_pkg_info(arg) return import os from os.path import basename, dirname, isdir, join import conda import conda.config as config from conda.cli.main_init import is_initialized options = 'envs', 'system', 'license' info_dict = dict( platform=config.subdir, conda_version=conda.__version__, root_prefix=config.root_dir, root_writable=config.root_writable, pkgs_dirs=config.pkgs_dirs, envs_dirs=config.envs_dirs, default_prefix=config.default_prefix, channels=config.get_channel_urls(), rc_path=config.rc_path, is_foreign=bool(config.foreign), envs=[], python_version='.'.join(map(str, sys.version_info)), ) if args.all or args.json: for option in options: setattr(args, option, True) if args.all or all(not getattr(args, opt) for opt in options): for key in 'pkgs_dirs', 'envs_dirs', 'channels': info_dict['_' + key] = ('\n' + 24 * ' ').join(info_dict[key]) info_dict['_rtwro'] = ('writable' if info_dict['root_writable'] else 'read only') print("""\ Current conda install: platform : %(platform)s conda version : %(conda_version)s python version : %(python_version)s root environment : %(root_prefix)s (%(_rtwro)s) default environment : %(default_prefix)s envs directories : %(_envs_dirs)s package cache : %(_pkgs_dirs)s channel URLs : %(_channels)s config file : %(rc_path)s is foreign system : %(is_foreign)s """ % info_dict) if not is_initialized(): print("""\ # NOTE: # root directory '%s' uninitalized, # use 'conda init' to initialize.""" % config.root_dir) if args.envs: if not args.json: print("# conda environments:") print("#") def disp_env(prefix): fmt = '%-20s %s %s' default = '*' if prefix == config.default_prefix else ' ' name = (config.root_env_name if prefix == config.root_dir else basename(prefix)) if not args.json: print(fmt % (name, default, prefix)) for envs_dir in config.envs_dirs: if not isdir(envs_dir): continue for dn in sorted(os.listdir(envs_dir)): if dn.startswith('.'): continue prefix = join(envs_dir, dn) if isdir(prefix): prefix = join(envs_dir, dn) disp_env(prefix) info_dict['envs'].append(prefix) disp_env(config.root_dir) print() if args.system and not args.json: from conda.cli.find_commands import find_commands, find_executable print("sys.version: %s..." % (sys.version[:40])) print("sys.prefix: %s" % sys.prefix) print("sys.executable: %s" % sys.executable) print("conda location: %s" % dirname(conda.__file__)) for cmd in sorted(set(find_commands() + ['build'])): print("conda-%s: %s" % (cmd, find_executable(cmd))) print() evars = [ 'PATH', 'PYTHONPATH', 'CONDA_DEFAULT_ENV', 'CIO_TEST', 'CONDA_ENVS_PATH' ] if config.platform == 'linux': evars.append('LD_LIBRARY_PATH') elif config.platform == 'osx': evars.append('DYLD_LIBRARY_PATH') for ev in sorted(evars): print("%s: %s" % (ev, os.getenv(ev, '<not set>'))) print() if args.license and not args.json: try: from _license import show_info show_info() except ImportError: print("""\ WARNING: could import _license.show_info # try: # $ conda install -n root _license""") if args.json: common.stdout_json(info_dict)
def execute(args, parser): import os from os.path import dirname import conda from conda.config import (root_dir, get_channel_urls, subdir, pkgs_dirs, root_writable, envs_dirs, default_prefix, rc_path, user_rc_path, sys_rc_path, foreign, hide_binstar_tokens, platform) from conda.resolve import Resolve from conda.cli.main_init import is_initialized from conda.api import get_index if args.root: if args.json: common.stdout_json({'root_prefix': root_dir}) else: print(root_dir) return if args.packages: index = get_index() r = Resolve(index) if args.json: common.stdout_json({ package: [ p._asdict() for p in sorted(r.get_pkgs(common.arg2spec(package))) ] for package in args.packages }) else: for package in args.packages: versions = r.get_pkgs(common.arg2spec(package)) for pkg in sorted(versions): pretty_package(pkg) return options = 'envs', 'system', 'license' try: import requests requests_version = requests.__version__ except ImportError: requests_version = "could not import" except Exception as e: requests_version = "Error %s" % e try: import conda_build except ImportError: conda_build_version = "not installed" except Exception as e: conda_build_version = "Error %s" % e else: conda_build_version = conda_build.__version__ channels = get_channel_urls() info_dict = dict( platform=subdir, conda_version=conda.__version__, conda_build_version=conda_build_version, root_prefix=root_dir, root_writable=root_writable, pkgs_dirs=pkgs_dirs, envs_dirs=envs_dirs, default_prefix=default_prefix, channels=channels, rc_path=rc_path, user_rc_path=user_rc_path, sys_rc_path=sys_rc_path, is_foreign=bool(foreign), envs=[], python_version='.'.join(map(str, sys.version_info)), requests_version=requests_version, ) if args.unsafe_channels: if not args.json: print("\n".join(info_dict["channels"])) else: print(json.dumps({"channels": info_dict["channels"]})) return 0 else: info_dict['channels'] = [ hide_binstar_tokens(c) for c in info_dict['channels'] ] if args.all or args.json: for option in options: setattr(args, option, True) if args.all or all(not getattr(args, opt) for opt in options): for key in 'pkgs_dirs', 'envs_dirs', 'channels': info_dict['_' + key] = ('\n' + 24 * ' ').join(info_dict[key]) info_dict['_rtwro'] = ('writable' if info_dict['root_writable'] else 'read only') print("""\ Current conda install: platform : %(platform)s conda version : %(conda_version)s conda-build version : %(conda_build_version)s python version : %(python_version)s requests version : %(requests_version)s root environment : %(root_prefix)s (%(_rtwro)s) default environment : %(default_prefix)s envs directories : %(_envs_dirs)s package cache : %(_pkgs_dirs)s channel URLs : %(_channels)s config file : %(rc_path)s is foreign system : %(is_foreign)s """ % info_dict) if not is_initialized(): print("""\ # NOTE: # root directory '%s' is uninitialized""" % root_dir) if args.envs: common.handle_envs_list(info_dict['envs'], not args.json) if args.system and not args.json: from conda.cli.find_commands import find_commands, find_executable print("sys.version: %s..." % (sys.version[:40])) print("sys.prefix: %s" % sys.prefix) print("sys.executable: %s" % sys.executable) print("conda location: %s" % dirname(conda.__file__)) for cmd in sorted(set(find_commands() + ['build'])): print("conda-%s: %s" % (cmd, find_executable('conda-' + cmd))) print("user site dirs: ", end='') site_dirs = get_user_site() if site_dirs: print(site_dirs[0]) else: print() for site_dir in site_dirs[1:]: print(' %s' % site_dir) print() evars = [ 'PATH', 'PYTHONPATH', 'PYTHONHOME', 'CONDA_DEFAULT_ENV', 'CIO_TEST', 'CONDA_ENVS_PATH' ] if platform == 'linux': evars.append('LD_LIBRARY_PATH') elif platform == 'osx': evars.append('DYLD_LIBRARY_PATH') for ev in sorted(evars): print("%s: %s" % (ev, os.getenv(ev, '<not set>'))) print() if args.license and not args.json: try: from _license import show_info show_info() except ImportError: print("""\ WARNING: could not import _license.show_info # try: # $ conda install -n root _license""") if args.json: common.stdout_json(info_dict)
def execute(args, parser): import conda.plan as plan import conda.instructions as inst from conda.install import rm_rf, linked from conda import config if not (args.all or args.package_names): common.error_and_exit('no package names supplied,\n' ' try "conda remove -h" for more details', json=args.json, error_type="ValueError") prefix = common.get_prefix(args) if args.all and prefix == config.default_prefix: common.error_and_exit("cannot remove current environment. deactivate and run conda remove again") common.check_write('remove', prefix, json=args.json) common.ensure_override_channels_requires_channel(args, json=args.json) channel_urls = args.channel or () if args.use_local: from conda.fetch import fetch_index from conda.utils import url_path try: from conda_build.config import croot except ImportError: common.error_and_exit("you need to have 'conda-build >= 1.7.1' installed" " to use the --use-local option", json=args.json, error_type="RuntimeError") # remove the cache such that a refetch is made, # this is necessary because we add the local build repo URL fetch_index.cache = {} if exists(croot): channel_urls = [url_path(croot)] + list(channel_urls) index = common.get_index_trap(channel_urls=channel_urls, prepend=not args.override_channels, use_cache=args.use_index_cache, json=args.json, offline=args.offline) else: index = common.get_index_trap(channel_urls=channel_urls, prepend=not args.override_channels, use_cache=args.use_index_cache, json=args.json, offline=args.offline) specs = None if args.features: features = set(args.package_names) actions = plan.remove_features_actions(prefix, index, features) elif args.all: if plan.is_root_prefix(prefix): common.error_and_exit('cannot remove root environment,\n' ' add -n NAME or -p PREFIX option', json=args.json, error_type="CantRemoveRoot") actions = {inst.PREFIX: prefix} for dist in sorted(linked(prefix)): plan.add_unlink(actions, dist) else: specs = common.specs_from_args(args.package_names) if (plan.is_root_prefix(prefix) and common.names_in_specs(common.root_no_rm, specs)): common.error_and_exit('cannot remove %s from root environment' % ', '.join(common.root_no_rm), json=args.json, error_type="CantRemoveFromRoot") actions = plan.remove_actions(prefix, specs, index=index, pinned=args.pinned) if plan.nothing_to_do(actions): if args.all: rm_rf(prefix) if args.json: common.stdout_json({ 'success': True, 'actions': actions }) return common.error_and_exit('no packages found to remove from ' 'environment: %s' % prefix, json=args.json, error_type="PackageNotInstalled") if not args.json: print() print("Package plan for package removal in environment %s:" % prefix) plan.display_actions(actions, index) if args.json and args.dry_run: common.stdout_json({ 'success': True, 'dry_run': True, 'actions': actions }) return if not args.json: common.confirm_yn(args) if args.json and not args.quiet: with json_progress_bars(): plan.execute_actions(actions, index, verbose=not args.quiet) else: plan.execute_actions(actions, index, verbose=not args.quiet) if specs: try: with open(join(prefix, 'conda-meta', 'history'), 'a') as f: f.write('# remove specs: %s\n' % specs) except IOError as e: if e.errno == errno.EACCES: log.debug("Can't write the history file") else: raise if args.all: rm_rf(prefix) if args.json: common.stdout_json({ 'success': True, 'actions': actions })
def execute(args, parser): import sys import conda.plan as plan from conda.cli import pscheck from conda.install import rm_rf, linked from conda import config if not (args.all or args.package_names): common.error_and_exit('no package names supplied,\n' ' try "conda remove -h" for more details', json=args.json, error_type="ValueError") prefix = common.get_prefix(args) if args.all and prefix == config.default_prefix: common.error_and_exit("cannot remove current environment. deactivate and run conda remove again") common.check_write('remove', prefix, json=args.json) common.ensure_override_channels_requires_channel(args, json=args.json) channel_urls = args.channel or () if args.use_local: from conda.fetch import fetch_index from conda.utils import url_path try: from conda_build.config import croot except ImportError: common.error_and_exit("you need to have 'conda-build >= 1.7.1' installed" " to use the --use-local option", json=args.json, error_type="RuntimeError") # remove the cache such that a refetch is made, # this is necessary because we add the local build repo URL fetch_index.cache = {} index = common.get_index_trap(channel_urls=[url_path(croot)] + list(channel_urls), prepend=not args.override_channels, use_cache=args.use_index_cache, json=args.json) else: index = common.get_index_trap(channel_urls=channel_urls, prepend=not args.override_channels, use_cache=args.use_index_cache, json=args.json) if args.features: features = set(args.package_names) actions = plan.remove_features_actions(prefix, index, features) elif args.all: if plan.is_root_prefix(prefix): common.error_and_exit('cannot remove root environment,\n' ' add -n NAME or -p PREFIX option', json=args.json, error_type="CantRemoveRoot") actions = {plan.PREFIX: prefix, plan.UNLINK: sorted(linked(prefix))} else: specs = common.specs_from_args(args.package_names) if (plan.is_root_prefix(prefix) and common.names_in_specs(common.root_no_rm, specs)): common.error_and_exit('cannot remove %s from root environment' % ', '.join(common.root_no_rm), json=args.json, error_type="CantRemoveFromRoot") actions = plan.remove_actions(prefix, specs, index=index, pinned=args.pinned) if plan.nothing_to_do(actions): if args.all: rm_rf(prefix) if args.json: common.stdout_json({ 'success': True, 'actions': actions }) return common.error_and_exit('no packages found to remove from ' 'environment: %s' % prefix, json=args.json, error_type="PackageNotInstalled") if not args.json: print() print("Package plan for package removal in environment %s:" % prefix) plan.display_actions(actions, index) if args.json and args.dry_run: common.stdout_json({ 'success': True, 'dry_run': True, 'actions': actions }) return if not args.json: if not pscheck.main(args): common.confirm_yn(args) elif (sys.platform == 'win32' and not args.force_pscheck and not pscheck.check_processes(verbose=False)): common.error_and_exit("Cannot continue removal while processes " "from packages are running without --force-pscheck.", json=True, error_type="ProcessesStillRunning") if args.json and not args.quiet: with json_progress_bars(): plan.execute_actions(actions, index, verbose=not args.quiet) else: plan.execute_actions(actions, index, verbose=not args.quiet) if args.all: rm_rf(prefix) if args.json: common.stdout_json({ 'success': True, 'actions': actions })
def test_make_install_plan(self): python_exe = "/darwin/bin/python" python_version = "2.6.10" site_packages_dir = "/darwin/lib/python2.6/site-packages" with patch("conda.core.initialize._get_python_info", return_value=( python_exe, python_version, site_packages_dir )): plan = make_install_plan("/darwin") stdout_json(plan) if on_win: assert plan == [ { "function": "make_entry_point_exe", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\Scripts\\conda.exe" } }, { "function": "make_entry_point_exe", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\Scripts\\conda-env.exe" } }, { "function": "make_entry_point", "kwargs": { "conda_prefix": "/darwin", "func": "main", "module": "conda.cli", "target_path": "/darwin\\Scripts\\conda-script.py" } }, { "function": "make_entry_point", "kwargs": { "conda_prefix": "/darwin", "func": "main", "module": "conda_env.cli.main", "target_path": "/darwin\\Scripts\\conda-env-script.py" } }, { "function": "install_condabin_conda_bat", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\condabin\\conda.bat" } }, { 'function': 'install_library_bin_conda_bat', 'kwargs': { 'conda_prefix': '/darwin', 'target_path': '/darwin\\Library\\bin\\conda.bat' } }, { "function": "install_condabin_conda_activate_bat", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\condabin\\_conda_activate.bat" } }, { 'function': 'install_condabin_rename_tmp_bat', 'kwargs': {'target_path': '/darwin\\condabin\\rename_tmp.bat', 'conda_prefix': '/darwin' } }, { "function": "install_condabin_conda_auto_activate_bat", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\condabin\\conda_auto_activate.bat" } }, { "function": "install_condabin_hook_bat", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\condabin\\conda_hook.bat" } }, { "function": "install_Scripts_activate_bat", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\Scripts\\activate.bat" } }, { "function": "install_activate_bat", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\condabin\\activate.bat" } }, { "function": "install_deactivate_bat", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\condabin\\deactivate.bat" } }, { "function": "install_activate", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\Scripts\\activate" } }, { "function": "install_deactivate", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\Scripts\\deactivate" } }, { "function": "install_conda_sh", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\etc\\profile.d\\conda.sh" } }, { "function": "install_conda_fish", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\etc\\fish\\conf.d\\conda.fish" } }, { 'function': 'install_conda_psm1', 'kwargs': { 'target_path': '/darwin\\shell\\condabin\\Conda.psm1', 'conda_prefix': '/darwin' } }, { 'function': 'install_conda_hook_ps1', 'kwargs': { 'target_path': '/darwin\\shell\\condabin\\conda-hook.ps1', 'conda_prefix': '/darwin' } }, { "function": "install_conda_xsh", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin/lib/python2.6/site-packages\\xontrib\\conda.xsh" } }, { "function": "install_conda_csh", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\etc\\profile.d\\conda.csh" } } ] else: assert plan == [ { "function": "make_entry_point", "kwargs": { "conda_prefix": "/darwin", "func": "main", "module": "conda.cli", "target_path": "/darwin/condabin/conda" } }, { "function": "make_entry_point", "kwargs": { "conda_prefix": "/darwin", "func": "main", "module": "conda.cli", "target_path": "/darwin/bin/conda" } }, { "function": "make_entry_point", "kwargs": { "conda_prefix": "/darwin", "func": "main", "module": "conda_env.cli.main", "target_path": "/darwin/bin/conda-env" } }, { "function": "install_activate", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin/bin/activate" } }, { "function": "install_deactivate", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin/bin/deactivate" } }, { "function": "install_conda_sh", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin/etc/profile.d/conda.sh" } }, { "function": "install_conda_fish", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin/etc/fish/conf.d/conda.fish" } }, { 'function': 'install_conda_psm1', 'kwargs': { 'target_path': '/darwin/shell/condabin/Conda.psm1', 'conda_prefix': '/darwin' } }, { 'function': 'install_conda_hook_ps1', 'kwargs': { 'target_path': '/darwin/shell/condabin/conda-hook.ps1', 'conda_prefix': '/darwin' } }, { "function": "install_conda_xsh", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin/lib/python2.6/site-packages/xontrib/conda.xsh" } }, { "function": "install_conda_csh", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin/etc/profile.d/conda.csh" } } ]
def execute_search(args, parser): import re import sys from conda.api import get_index from conda.resolve import MatchSpec, Resolve pat = None ms = None if args.regex: if args.spec: ms = MatchSpec(' '.join(args.regex.split('='))) else: try: pat = re.compile(args.regex, re.I) except re.error as e: common.error_and_exit("%r is not a valid regex pattern (exception: %s)" % (args.regex, e), json=args.json, error_type="ValueError") prefix = common.get_prefix(args) if not args.canonical: import conda.config import conda.install linked = conda.install.linked(prefix) extracted = set() for pkgs_dir in conda.config.pkgs_dirs: extracted.update(conda.install.extracted(pkgs_dir)) # XXX: Make this work with more than one platform platform = args.platform or '' if platform and platform != config.subdir: args.unknown = False common.ensure_override_channels_requires_channel(args, dashc=False, json=args.json) channel_urls = args.channel or () index = common.get_index_trap(channel_urls=channel_urls, prepend=not args.override_channels, platform=args.platform, use_cache=args.use_index_cache, unknown=args.unknown, json=args.json) r = Resolve(index) if args.canonical: json = [] else: json = {} for name in sorted(r.groups): disp_name = name if pat and pat.search(name) is None: continue if ms and name != ms.name: continue if ms: ms_name = ms else: ms_name = MatchSpec(name) if not args.canonical: json[name] = [] if args.outdated: vers_inst = [dist.rsplit('-', 2)[1] for dist in linked if dist.rsplit('-', 2)[0] == name] if not vers_inst: continue assert len(vers_inst) == 1, name pkgs = sorted(r.get_pkgs(ms_name)) if not pkgs: continue latest = pkgs[-1] if latest.version == vers_inst[0]: continue for pkg in sorted(r.get_pkgs(ms_name)): dist = pkg.fn[:-8] if args.canonical: if not args.json: print(dist) else: json.append(dist) continue if dist in linked: inst = '*' elif dist in extracted: inst = '.' else: inst = ' ' if not args.json: print('%-25s %s %-15s %15s %-15s %s' % ( disp_name, inst, pkg.version, pkg.build, config.canonical_channel_name(pkg.channel), common.disp_features(r.features(pkg.fn)), )) disp_name = '' else: data = {} data.update(pkg.info) data.update({ 'fn': pkg.fn, 'installed': inst == '*', 'extracted': inst in '*.', 'version': pkg.version, 'build': pkg.build, 'build_number': pkg.build_number, 'channel': config.canonical_channel_name(pkg.channel), 'full_channel': pkg.channel, 'features': list(r.features(pkg.fn)), 'license': pkg.info.get('license'), 'size': pkg.info.get('size'), 'depends': pkg.info.get('depends'), 'type': pkg.info.get('type') }) if data['type'] == 'app': data['icon'] = make_icon_url(pkg.info) json[name].append(data) if args.json: common.stdout_json(json)
def execute(args, parser): info_dict = {'envs': []} common.handle_envs_list(info_dict['envs'], not args.json) if args.json: common.stdout_json(info_dict)
def execute(args, parser): import sys import conda.plan as plan from conda.cli import pscheck from conda.install import rm_rf, linked from conda import config if not (args.all or args.package_names): common.error_and_exit( 'no package names supplied,\n' ' try "conda remove -h" for more details', json=args.json, error_type="ValueError") prefix = common.get_prefix(args) common.check_write('remove', prefix, json=args.json) common.ensure_override_channels_requires_channel(args, json=args.json) channel_urls = args.channel or () index = common.get_index_trap(channel_urls=channel_urls, use_cache=args.use_index_cache, prepend=not args.override_channels, json=args.json) if args.features: features = set(args.package_names) actions = plan.remove_features_actions(prefix, index, features) elif args.all: if plan.is_root_prefix(prefix): common.error_and_exit( 'cannot remove root environment,\n' ' add -n NAME or -p PREFIX option', json=args.json, error_type="CantRemoveRoot") actions = {plan.PREFIX: prefix, plan.UNLINK: sorted(linked(prefix))} else: specs = common.specs_from_args(args.package_names) if (plan.is_root_prefix(prefix) and common.names_in_specs(common.root_no_rm, specs)): common.error_and_exit('cannot remove %s from root environment' % ', '.join(common.root_no_rm), json=args.json, error_type="CantRemoveFromRoot") actions = plan.remove_actions(prefix, specs, pinned=args.pinned) if plan.nothing_to_do(actions): if args.all: rm_rf(prefix) if args.json: common.stdout_json({'success': True, 'actions': actions}) return common.error_and_exit('no packages found to remove from ' 'environment: %s' % prefix, json=args.json, error_type="PackageNotInstalled") if not args.json: print() print("Package plan for package removal in environment %s:" % prefix) plan.display_actions(actions, index) if args.json and args.dry_run: common.stdout_json({ 'success': True, 'dry_run': True, 'actions': actions }) return if not args.json: if not pscheck.main(args): common.confirm_yn(args) elif (sys.platform == 'win32' and not args.force_pscheck and not pscheck.check_processes(verbose=False)): common.error_and_exit( "Cannot continue removal while processes " "from packages are running without --force-pscheck.", json=True, error_type="ProcessesStillRunning") if args.json and not args.quiet: with json_progress_bars(): plan.execute_actions(actions, index, verbose=not args.quiet) else: plan.execute_actions(actions, index, verbose=not args.quiet) if args.all: rm_rf(prefix) if args.json: common.stdout_json({'success': True, 'actions': actions})
def execute(args, parser): import conda.plan as plan import conda.instructions as inst from conda.install import rm_rf, linked from conda import config if not (args.all or args.package_names): common.error_and_exit( 'no package names supplied,\n' ' try "conda remove -h" for more details', json=args.json, error_type="ValueError") prefix = common.get_prefix(args) if args.all and prefix == config.default_prefix: common.error_and_exit( "cannot remove current environment. deactivate and run conda remove again" ) common.check_write('remove', prefix, json=args.json) common.ensure_override_channels_requires_channel(args, json=args.json) channel_urls = args.channel or () if args.use_local: from conda.fetch import fetch_index from conda.utils import url_path try: from conda_build.config import croot except ImportError: common.error_and_exit( "you need to have 'conda-build >= 1.7.1' installed" " to use the --use-local option", json=args.json, error_type="RuntimeError") # remove the cache such that a refetch is made, # this is necessary because we add the local build repo URL fetch_index.cache = {} if exists(croot): channel_urls = [url_path(croot)] + list(channel_urls) index = common.get_index_trap(channel_urls=channel_urls, prepend=not args.override_channels, use_cache=args.use_index_cache, json=args.json, offline=args.offline) else: index = common.get_index_trap(channel_urls=channel_urls, prepend=not args.override_channels, use_cache=args.use_index_cache, json=args.json, offline=args.offline) specs = None if args.features: features = set(args.package_names) actions = plan.remove_features_actions(prefix, index, features) elif args.all: if plan.is_root_prefix(prefix): common.error_and_exit( 'cannot remove root environment,\n' ' add -n NAME or -p PREFIX option', json=args.json, error_type="CantRemoveRoot") actions = {inst.PREFIX: prefix} for dist in sorted(linked(prefix)): plan.add_unlink(actions, dist) else: specs = common.specs_from_args(args.package_names) if (plan.is_root_prefix(prefix) and common.names_in_specs(common.root_no_rm, specs)): common.error_and_exit('cannot remove %s from root environment' % ', '.join(common.root_no_rm), json=args.json, error_type="CantRemoveFromRoot") actions = plan.remove_actions(prefix, specs, index=index, pinned=args.pinned) if plan.nothing_to_do(actions): if args.all: rm_rf(prefix) if args.json: common.stdout_json({'success': True, 'actions': actions}) return common.error_and_exit('no packages found to remove from ' 'environment: %s' % prefix, json=args.json, error_type="PackageNotInstalled") if not args.json: print() print("Package plan for package removal in environment %s:" % prefix) plan.display_actions(actions, index) if args.json and args.dry_run: common.stdout_json({ 'success': True, 'dry_run': True, 'actions': actions }) return if not args.json: common.confirm_yn(args) if args.json and not args.quiet: with json_progress_bars(): plan.execute_actions(actions, index, verbose=not args.quiet) else: plan.execute_actions(actions, index, verbose=not args.quiet) if specs: try: with open(join(prefix, 'conda-meta', 'history'), 'a') as f: f.write('# remove specs: %s\n' % specs) except IOError as e: if e.errno == errno.EACCES: log.debug("Can't write the history file") else: raise if args.all: rm_rf(prefix) if args.json: common.stdout_json({'success': True, 'actions': actions})
def execute(args, parser): import os from os.path import basename, dirname, isdir, join import conda import conda.config as config from conda.cli.main_init import is_initialized options = 'envs', 'system', 'license' info_dict = dict(platform=config.subdir, conda_version=conda.__version__, root_prefix=config.root_dir, root_writable=config.root_writable, pkgs_dirs=config.pkgs_dirs, envs_dirs=config.envs_dirs, default_prefix=config.default_prefix, channels=config.get_channel_urls(), rc_path=config.rc_path, envs=[]) if args.all or args.json: for option in options: setattr(args, option, True) if args.all or all(not getattr(args, opt) for opt in options): for key in 'pkgs_dirs', 'envs_dirs', 'channels': info_dict['_' + key] = ('\n' + 24 * ' ').join(info_dict[key]) info_dict['_rtwro'] = ('writable' if info_dict['root_writable'] else 'read only') print("""\ Current conda install: platform : %(platform)s conda version : %(conda_version)s root environment : %(root_prefix)s (%(_rtwro)s) default environment : %(default_prefix)s envs directories : %(_envs_dirs)s package cache : %(_pkgs_dirs)s channel URLs : %(_channels)s config file : %(rc_path)s """ % info_dict) if not is_initialized(): print("""\ # NOTE: # root directory '%s' uninitalized, # use 'conda init' to initialize.""" % config.root_dir) if args.envs: if not args.json: print("# conda environments:") print("#") def disp_env(prefix): fmt = '%-20s %s %s' default = '*' if prefix == config.default_prefix else ' ' name = (config.root_env_name if prefix == config.root_dir else basename(prefix)) if not args.json: print(fmt % (name, default, prefix)) for envs_dir in config.envs_dirs: if not isdir(envs_dir): continue for dn in sorted(os.listdir(envs_dir)): if dn.startswith('.'): continue prefix = join(envs_dir, dn) if isdir(prefix): prefix = join(envs_dir, dn) disp_env(prefix) info_dict['envs'].append(prefix) disp_env(config.root_dir) print() if args.system and not args.json: import sys print("sys.version: %s..." % (sys.version[:40])) print("sys.prefix: %s" % sys.prefix) print("sys.executable: %s" % sys.executable) print("conda location: %s" % dirname(conda.__file__)) print() evars = ['PATH', 'PYTHONPATH', 'CONDA_DEFAULT_ENV', 'CIO_TEST', 'CONDA_ENVS_PATH'] if config.platform == 'linux': evars.append('LD_LIBRARY_PATH') elif config.platform == 'osx': evars.append('DYLD_LIBRARY_PATH') for ev in sorted(evars): print("%s: %s" % (ev, os.getenv(ev, '<not set>'))) print() if args.license and not args.json: try: from _license import show_info show_info() except ImportError: print("""\ WARNING: could import _license.show_info # try: # $ conda install -n root _license""") if args.json: common.stdout_json(info_dict)
def execute(args, parser): import os import sys from os.path import basename, dirname, join import conda import conda.config as config options = 'envs', 'system', 'license' info_dict = dict(platform=config.subdir, conda_version=conda.__version__, conda_location=dirname(conda.__file__), root_prefix=config.root_dir, default_prefix=config.default_prefix, channels=config.get_channel_urls(), rc_path=config.rc_path) if args.json: common.stdout_json(info_dict) return if args.all: for option in options: setattr(args, option, True) if args.all or all(not getattr(args, opt) for opt in options): info_dict['ppcs'] = ('\n' + 24 * ' ').join(info_dict['channels']) print(""" Current conda install: platform : %(platform)s conda version : %(conda_version)s conda location : %(conda_location)s root environment : %(root_prefix)s default environment : %(default_prefix)s channel URLs : %(ppcs)s config file : %(rc_path)s """ % info_dict ) if args.envs: print("# conda environments:") print("#") def disp_env(prefix): fmt = '%-20s %s %s' default = '*' if prefix == config.default_prefix else ' ' name = (basename(prefix) if prefix.startswith(config.envs_dir) else '(root)') print(fmt % (name, default, prefix)) disp_env(config.root_dir) for dn in sorted(os.listdir(config.envs_dir)): if os.path.isdir(os.path.join(config.envs_dir, dn)): disp_env(join(config.envs_dir, dn)) print() if args.system: print() print("PATH: %s" % os.getenv('PATH')) print("PYTHONPATH: %s" % os.getenv('PYTHONPATH')) if config.platform == 'linux': print("LD_LIBRARY_PATH: %s" % os.getenv('LD_LIBRARY_PATH')) elif sys.platform == 'darwin': print("DYLD_LIBRARY_PATH: %s" % os.getenv('DYLD_LIBRARY_PATH')) print("CONDA_DEFAULT_ENV: %s" % os.getenv('CONDA_DEFAULT_ENV')) print() if args.license: try: from _license import show_info show_info() except ImportError: print("WARNING: could import _license.show_info,\n" " try: conda install _license")
def execute(args, parser): from conda import config, plan from conda.install import linked, rm_rf prefix = common.get_prefix(args) if plan.is_root_prefix(prefix): common.error_and_exit( 'cannot remove root environment,\n' ' add -n NAME or -p PREFIX option', json=args.json, error_type="CantRemoveRoot") if prefix == config.default_prefix: # FIXME The way the "name" is determined now is handled by # looking at the basename of the prefix. This is brittle # and underlines a use-case for an Environment object that # is capable of providing a name attribute. common.error_and_exit( textwrap.dedent(""" Conda cannot remove the current environment. Please deactivate and run conda env remove again with the name specified. conda env remove --name %s """ % basename(prefix)).lstrip()) # TODO Why do we need an index for removing packages? index = common.get_index_trap(json=args.json) actions = {plan.PREFIX: prefix, plan.UNLINK: sorted(linked(prefix))} if plan.nothing_to_do(actions): # TODO Should this automatically remove even *before* confirmation? # TODO Should this display an error when removing something that # doesn't exist? rm_rf(prefix) if args.json: common.stdout_json({'success': True, 'actions': actions}) return if args.json and args.dry_run: common.stdout_json({ 'success': True, 'dry_run': True, 'actions': actions }) return if not args.json: print() print("Remove the following packages in environment %s:" % prefix) plan.display_actions(actions, index) common.confirm_yn(args) plan.execute_actions(actions, index, verbose=not args.quiet) rm_rf(prefix) if args.json: common.stdout_json({'success': True, 'actions': actions})
def execute(args, parser): info_dict = {'envs': list_all_known_prefixes()} common.print_envs_list(info_dict['envs'], not args.json) if args.json: common.stdout_json(info_dict)
def execute(args, parser): import os from os.path import basename, dirname import conda import conda.config as config import conda.misc as misc from conda.resolve import Resolve, MatchSpec from conda.cli.main_init import is_initialized from conda.api import get_index, get_package_versions if args.root: if args.json: common.stdout_json({'root_prefix': config.root_dir}) else: print(config.root_dir) return if args.packages: if args.json: results = defaultdict(list) for arg in args.packages: for pkg in get_package_versions(arg): results[arg].append(pkg._asdict()) common.stdout_json(results) return index = get_index() r = Resolve(index) specs = map(common.arg2spec, args.packages) for spec in specs: versions = r.get_pkgs(MatchSpec(spec)) for pkg in versions: pretty_package(pkg) return options = 'envs', 'system', 'license' try: import requests requests_version = requests.__version__ except ImportError: requests_version = "could not import" except Exception as e: requests_version = "Error %s" % e try: import conda_build except ImportError: conda_build_version = "not installed" except Exception as e: conda_build_version = "Error %s" % e else: conda_build_version = conda_build.__version__ info_dict = dict(platform=config.subdir, conda_version=conda.__version__, conda_build_version=conda_build_version, root_prefix=config.root_dir, root_writable=config.root_writable, pkgs_dirs=config.pkgs_dirs, envs_dirs=config.envs_dirs, default_prefix=config.default_prefix, channels=config.get_channel_urls(), rc_path=config.rc_path, user_rc_path=config.user_rc_path, sys_rc_path=config.sys_rc_path, is_foreign=bool(config.foreign), envs=[], python_version='.'.join(map(str, sys.version_info)), requests_version=requests_version, ) if args.all or args.json: for option in options: setattr(args, option, True) info_dict['channels'] = [config.hide_binstar_tokens(c) for c in info_dict['channels']] if args.all or all(not getattr(args, opt) for opt in options): for key in 'pkgs_dirs', 'envs_dirs', 'channels': info_dict['_' + key] = ('\n' + 24 * ' ').join(info_dict[key]) info_dict['_rtwro'] = ('writable' if info_dict['root_writable'] else 'read only') print("""\ Current conda install: platform : %(platform)s conda version : %(conda_version)s conda-build version : %(conda_build_version)s python version : %(python_version)s requests version : %(requests_version)s root environment : %(root_prefix)s (%(_rtwro)s) default environment : %(default_prefix)s envs directories : %(_envs_dirs)s package cache : %(_pkgs_dirs)s channel URLs : %(_channels)s config file : %(rc_path)s is foreign system : %(is_foreign)s """ % info_dict) if not is_initialized(): print("""\ # NOTE: # root directory '%s' is uninitialized""" % config.root_dir) if args.envs: common.handle_envs_list(info_dict['envs'], not args.json) if args.system and not args.json: from conda.cli.find_commands import find_commands, find_executable print("sys.version: %s..." % (sys.version[:40])) print("sys.prefix: %s" % sys.prefix) print("sys.executable: %s" % sys.executable) print("conda location: %s" % dirname(conda.__file__)) for cmd in sorted(set(find_commands() + ['build'])): print("conda-%s: %s" % (cmd, find_executable('conda-' + cmd))) print("user site dirs: ", end='') site_dirs = get_user_site() if site_dirs: print(site_dirs[0]) else: print() for site_dir in site_dirs[1:]: print(' %s' % site_dir) print() evars = ['PATH', 'PYTHONPATH', 'PYTHONHOME', 'CONDA_DEFAULT_ENV', 'CIO_TEST', 'CONDA_ENVS_PATH'] if config.platform == 'linux': evars.append('LD_LIBRARY_PATH') elif config.platform == 'osx': evars.append('DYLD_LIBRARY_PATH') for ev in sorted(evars): print("%s: %s" % (ev, os.getenv(ev, '<not set>'))) print() if args.license and not args.json: try: from _license import show_info show_info() except ImportError: print("""\ WARNING: could not import _license.show_info # try: # $ conda install -n root _license""") if args.json: common.stdout_json(info_dict)
def execute(args, parser): if args.args: for arg in args.args: if isfile(arg): from conda.misc import which_package path = arg for dist in which_package(path): print("%-50s %s" % (path, dist)) else: show_pkg_info(arg) return import os from os.path import basename, dirname, isdir, join import conda import conda.config as config from conda.cli.main_init import is_initialized options = "envs", "system", "license" info_dict = dict( platform=config.subdir, conda_version=conda.__version__, root_prefix=config.root_dir, root_writable=config.root_writable, pkgs_dirs=config.pkgs_dirs, envs_dirs=config.envs_dirs, default_prefix=config.default_prefix, channels=config.get_channel_urls(), rc_path=config.rc_path, is_foreign=bool(config.foreign), envs=[], ) if args.all or args.json: for option in options: setattr(args, option, True) if args.all or all(not getattr(args, opt) for opt in options): for key in "pkgs_dirs", "envs_dirs", "channels": info_dict["_" + key] = ("\n" + 24 * " ").join(info_dict[key]) info_dict["_rtwro"] = "writable" if info_dict["root_writable"] else "read only" print( """\ Current conda install: platform : %(platform)s conda version : %(conda_version)s root environment : %(root_prefix)s (%(_rtwro)s) default environment : %(default_prefix)s envs directories : %(_envs_dirs)s package cache : %(_pkgs_dirs)s channel URLs : %(_channels)s config file : %(rc_path)s is foreign system : %(is_foreign)s """ % info_dict ) if not is_initialized(): print( """\ # NOTE: # root directory '%s' uninitalized, # use 'conda init' to initialize.""" % config.root_dir ) if args.envs: if not args.json: print("# conda environments:") print("#") def disp_env(prefix): fmt = "%-20s %s %s" default = "*" if prefix == config.default_prefix else " " name = config.root_env_name if prefix == config.root_dir else basename(prefix) if not args.json: print(fmt % (name, default, prefix)) for envs_dir in config.envs_dirs: if not isdir(envs_dir): continue for dn in sorted(os.listdir(envs_dir)): if dn.startswith("."): continue prefix = join(envs_dir, dn) if isdir(prefix): prefix = join(envs_dir, dn) disp_env(prefix) info_dict["envs"].append(prefix) disp_env(config.root_dir) print() if args.system and not args.json: import sys from conda.cli.find_commands import find_commands, find_executable print("sys.version: %s..." % (sys.version[:40])) print("sys.prefix: %s" % sys.prefix) print("sys.executable: %s" % sys.executable) print("conda location: %s" % dirname(conda.__file__)) for cmd in sorted(set(find_commands() + ["build"])): print("conda-%s: %s" % (cmd, find_executable(cmd))) print() evars = ["PATH", "PYTHONPATH", "CONDA_DEFAULT_ENV", "CIO_TEST", "CONDA_ENVS_PATH"] if config.platform == "linux": evars.append("LD_LIBRARY_PATH") elif config.platform == "osx": evars.append("DYLD_LIBRARY_PATH") for ev in sorted(evars): print("%s: %s" % (ev, os.getenv(ev, "<not set>"))) print() if args.license and not args.json: try: from _license import show_info show_info() except ImportError: print( """\ WARNING: could import _license.show_info # try: # $ conda install -n root _license""" ) if args.json: common.stdout_json(info_dict)
def execute_search(args, parser): import re from conda.resolve import Resolve if args.reverse_dependency: if not args.regex: parser.error("--reverse-dependency requires at least one package name") if args.spec: parser.error("--reverse-dependency does not work with --spec") pat = None ms = None if args.regex: if args.spec: ms = ' '.join(args.regex.split('=')) else: regex = args.regex if args.full_name: regex = r'^%s$' % regex try: pat = re.compile(regex, re.I) except re.error as e: common.error_and_exit( "'%s' is not a valid regex pattern (exception: %s)" % (regex, e), json=args.json, error_type="ValueError") prefix = common.get_prefix(args) import conda.install linked = conda.install.linked(prefix) extracted = conda.install.extracted() # XXX: Make this work with more than one platform platform = args.platform or '' if platform and platform != subdir: args.unknown = False common.ensure_use_local(args) common.ensure_override_channels_requires_channel(args, dashc=False) channel_urls = args.channel or () index = common.get_index_trap(channel_urls=channel_urls, prepend=not args.override_channels, platform=args.platform, use_local=args.use_local, use_cache=args.use_index_cache, prefix=prefix, unknown=args.unknown, json=args.json, offline=args.offline) r = Resolve(index) if args.canonical: json = [] else: json = {} names = [] for name in sorted(r.groups): if '@' in name: continue if args.reverse_dependency: ms_name = ms for pkg in r.groups[name]: for dep in r.ms_depends(pkg): if pat.search(dep.name): names.append((name, Package(pkg, r.index[pkg]))) else: if pat and pat.search(name) is None: continue if ms and name != ms.split()[0]: continue if ms: ms_name = ms else: ms_name = name pkgs = sorted(r.get_pkgs(ms_name)) names.append((name, pkgs)) if args.reverse_dependency: new_names = [] old = None for name, pkg in sorted(names, key=lambda x: (x[0], x[1].name, x[1])): if name == old: new_names[-1][1].append(pkg) else: new_names.append((name, [pkg])) old = name names = new_names for name, pkgs in names: if args.reverse_dependency: disp_name = pkgs[0].name else: disp_name = name if args.names_only and not args.outdated: print(name) continue if not args.canonical: json[name] = [] if args.outdated: vers_inst = [dist[1] for dist in map(dist2quad, linked) if dist[0] == name] if not vers_inst: continue assert len(vers_inst) == 1, name if not pkgs: continue latest = pkgs[-1] if latest.version == vers_inst[0]: continue if args.names_only: print(name) continue for pkg in pkgs: dist = pkg.fn[:-8] if args.canonical: if not args.json: print(dist) else: json.append(dist) continue if platform and platform != subdir: inst = ' ' elif dist in linked: inst = '*' elif dist in extracted: inst = '.' else: inst = ' ' if not args.json: print('%-25s %s %-15s %15s %-15s %s' % ( disp_name, inst, pkg.version, pkg.build, canonical_channel_name(pkg.channel), common.disp_features(r.features(pkg.fn)), )) disp_name = '' else: data = {} data.update(pkg.info) data.update({ 'fn': pkg.fn, 'installed': inst == '*', 'extracted': inst in '*.', 'version': pkg.version, 'build': pkg.build, 'build_number': pkg.build_number, 'channel': canonical_channel_name(pkg.channel), 'full_channel': pkg.channel, 'features': list(r.features(pkg.fn)), 'license': pkg.info.get('license'), 'size': pkg.info.get('size'), 'depends': pkg.info.get('depends'), 'type': pkg.info.get('type') }) if data['type'] == 'app': data['icon'] = make_icon_url(pkg.info) json[name].append(data) if args.json: common.stdout_json(json)
def execute(args, parser): import sys import conda.plan as plan from conda.cli import pscheck from conda.install import rm_rf, linked from conda import config if not (args.all or args.package_names): common.error_and_exit( 'no package names supplied,\n' ' try "conda remove -h" for more details', json=args.json, error_type="ValueError") prefix = common.get_prefix(args) if args.all and prefix == config.default_prefix: common.error_and_exit( "cannot remove current environment. deactivate and run conda remove again" ) common.check_write('remove', prefix, json=args.json) common.ensure_override_channels_requires_channel(args, json=args.json) channel_urls = args.channel or () if args.use_local: from conda.fetch import fetch_index from conda.utils import url_path try: from conda_build.config import croot except ImportError: common.error_and_exit( "you need to have 'conda-build >= 1.7.1' installed" " to use the --use-local option", json=args.json, error_type="RuntimeError") # remove the cache such that a refetch is made, # this is necessary because we add the local build repo URL fetch_index.cache = {} index = common.get_index_trap(channel_urls=[url_path(croot)] + list(channel_urls), prepend=not args.override_channels, use_cache=args.use_index_cache, json=args.json) else: index = common.get_index_trap(channel_urls=channel_urls, prepend=not args.override_channels, use_cache=args.use_index_cache, json=args.json) if args.features: features = set(args.package_names) actions = plan.remove_features_actions(prefix, index, features) elif args.all: if plan.is_root_prefix(prefix): common.error_and_exit( 'cannot remove root environment,\n' ' add -n NAME or -p PREFIX option', json=args.json, error_type="CantRemoveRoot") actions = {plan.PREFIX: prefix, plan.UNLINK: sorted(linked(prefix))} else: specs = common.specs_from_args(args.package_names) if (plan.is_root_prefix(prefix) and common.names_in_specs(common.root_no_rm, specs)): common.error_and_exit('cannot remove %s from root environment' % ', '.join(common.root_no_rm), json=args.json, error_type="CantRemoveFromRoot") actions = plan.remove_actions(prefix, specs, index=index, pinned=args.pinned) if plan.nothing_to_do(actions): if args.all: rm_rf(prefix) if args.json: common.stdout_json({'success': True, 'actions': actions}) return common.error_and_exit('no packages found to remove from ' 'environment: %s' % prefix, json=args.json, error_type="PackageNotInstalled") if not args.json: print() print("Package plan for package removal in environment %s:" % prefix) plan.display_actions(actions, index) if args.json and args.dry_run: common.stdout_json({ 'success': True, 'dry_run': True, 'actions': actions }) return if not args.json: if not pscheck.main(args): common.confirm_yn(args) elif (sys.platform == 'win32' and not args.force_pscheck and not pscheck.check_processes(verbose=False)): common.error_and_exit( "Cannot continue removal while processes " "from packages are running without --force-pscheck.", json=True, error_type="ProcessesStillRunning") if args.json and not args.quiet: with json_progress_bars(): plan.execute_actions(actions, index, verbose=not args.quiet) else: plan.execute_actions(actions, index, verbose=not args.quiet) if args.all: rm_rf(prefix) if args.json: common.stdout_json({'success': True, 'actions': actions})
def execute(args, parser): import os from os.path import basename, dirname import conda import conda.config as config import conda.misc as misc from conda.resolve import Resolve, MatchSpec from conda.cli.main_init import is_initialized from conda.api import get_index, get_package_versions if args.packages: if args.json: results = defaultdict(list) for arg in args.packages: for pkg in get_package_versions(arg): results[arg].append(pkg._asdict()) common.stdout_json(results) return index = get_index() r = Resolve(index) specs = map(common.arg2spec, args.packages) for spec in specs: versions = r.get_pkgs(MatchSpec(spec)) for pkg in versions: pretty_package(pkg) return options = 'envs', 'system', 'license' try: import requests requests_version = requests.__version__ except ImportError: requests_version = "could not import" except Exception as e: requests_version = "Error %s" % e try: import conda_build except ImportError: conda_build_version = "not installed" except Exception as e: conda_build_version = "Error %s" % e else: conda_build_version = conda_build.__version__ info_dict = dict( platform=config.subdir, conda_version=conda.__version__, conda_build_version=conda_build_version, root_prefix=config.root_dir, root_writable=config.root_writable, pkgs_dirs=config.pkgs_dirs, envs_dirs=config.envs_dirs, default_prefix=config.default_prefix, channels=config.get_channel_urls(), rc_path=config.rc_path, is_foreign=bool(config.foreign), envs=[], python_version='.'.join(map(str, sys.version_info)), requests_version=requests_version, ) if args.all or args.json: for option in options: setattr(args, option, True) info_dict['channels_disp'] = [ config.hide_binstar_tokens(c) for c in info_dict['channels'] ] if args.all or all(not getattr(args, opt) for opt in options): for key in 'pkgs_dirs', 'envs_dirs', 'channels_disp': info_dict['_' + key] = ('\n' + 24 * ' ').join(info_dict[key]) info_dict['_rtwro'] = ('writable' if info_dict['root_writable'] else 'read only') print("""\ Current conda install: platform : %(platform)s conda version : %(conda_version)s conda-build version : %(conda_build_version)s python version : %(python_version)s requests version : %(requests_version)s root environment : %(root_prefix)s (%(_rtwro)s) default environment : %(default_prefix)s envs directories : %(_envs_dirs)s package cache : %(_pkgs_dirs)s channel URLs : %(_channels_disp)s config file : %(rc_path)s is foreign system : %(is_foreign)s """ % info_dict) if not is_initialized(): print("""\ # NOTE: # root directory '%s' is uninitialized""" % config.root_dir) del info_dict['channels_disp'] if args.envs: if not args.json: print("# conda environments:") print("#") def disp_env(prefix): fmt = '%-20s %s %s' default = '*' if prefix == config.default_prefix else ' ' name = (config.root_env_name if prefix == config.root_dir else basename(prefix)) if not args.json: print(fmt % (name, default, prefix)) for prefix in misc.list_prefixes(): disp_env(prefix) if prefix != config.root_dir: info_dict['envs'].append(prefix) print() if args.system and not args.json: from conda.cli.find_commands import find_commands, find_executable print("sys.version: %s..." % (sys.version[:40])) print("sys.prefix: %s" % sys.prefix) print("sys.executable: %s" % sys.executable) print("conda location: %s" % dirname(conda.__file__)) for cmd in sorted(set(find_commands() + ['build'])): print("conda-%s: %s" % (cmd, find_executable('conda-' + cmd))) print("user site dirs: ", end='') site_dirs = get_user_site() if site_dirs: print(site_dirs[0]) else: print() for site_dir in site_dirs[1:]: print(' %s' % site_dir) print() evars = [ 'PATH', 'PYTHONPATH', 'PYTHONHOME', 'CONDA_DEFAULT_ENV', 'CIO_TEST', 'CONDA_ENVS_PATH' ] if config.platform == 'linux': evars.append('LD_LIBRARY_PATH') elif config.platform == 'osx': evars.append('DYLD_LIBRARY_PATH') for ev in sorted(evars): print("%s: %s" % (ev, os.getenv(ev, '<not set>'))) print() if args.license and not args.json: try: from _license import show_info show_info() except ImportError: print("""\ WARNING: could not import _license.show_info # try: # $ conda install -n root _license""") if args.json: common.stdout_json(info_dict)
def execute(args, parser): import sys import conda.plan as plan from conda.cli import pscheck from conda.install import rm_rf, linked from conda import config if not (args.all or args.package_names): common.error_and_exit('no package names supplied,\n' ' try "conda remove -h" for more details', json=args.json, error_type="ValueError") prefix = common.get_prefix(args) common.check_write('remove', prefix, json=args.json) common.ensure_override_channels_requires_channel(args, json=args.json) channel_urls = args.channel or () index = common.get_index_trap(channel_urls=channel_urls, use_cache=args.use_index_cache, prepend=not args.override_channels, json=args.json) if args.features: features = set(args.package_names) actions = plan.remove_features_actions(prefix, index, features) elif args.all: if plan.is_root_prefix(prefix): common.error_and_exit('cannot remove root environment,\n' ' add -n NAME or -p PREFIX option', json=args.json, error_type="CantRemoveRoot") actions = {plan.PREFIX: prefix, plan.UNLINK: sorted(linked(prefix))} else: specs = common.specs_from_args(args.package_names) if (plan.is_root_prefix(prefix) and common.names_in_specs(common.root_no_rm, specs)): common.error_and_exit('cannot remove %s from root environment' % ', '.join(common.root_no_rm), json=args.json, error_type="CantRemoveFromRoot") actions = plan.remove_actions(prefix, specs, pinned=args.pinned) if plan.nothing_to_do(actions): if args.all: rm_rf(prefix) if args.json: common.stdout_json({ 'success': True, 'actions': actions }) return common.error_and_exit('no packages found to remove from ' 'environment: %s' % prefix, json=args.json, error_type="PackageNotInstalled") if not args.json: print() print("Package plan for package removal in environment %s:" % prefix) plan.display_actions(actions, index) if args.json and args.dry_run: common.stdout_json({ 'success': True, 'dry_run': True, 'actions': actions }) return if not args.json: if not pscheck.main(args): common.confirm_yn(args) elif (sys.platform == 'win32' and not args.force_pscheck and not pscheck.check_processes(verbose=False)): common.error_and_exit("Cannot continue removal while processes " "from packages are running without --force-pscheck.", json=True, error_type="ProcessesStillRunning") if args.json and not args.quiet: with json_progress_bars(): plan.execute_actions(actions, index, verbose=not args.quiet) else: plan.execute_actions(actions, index, verbose=not args.quiet) if args.all: rm_rf(prefix) if args.json: common.stdout_json({ 'success': True, 'actions': actions })
def execute_search(args, parser): import re from conda.resolve import MatchSpec, Resolve if args.reverse_dependency: if not args.regex: parser.error("--reverse-dependency requires at least one package name") if args.spec: parser.error("--reverse-dependency does not work with --spec") pat = None ms = None if args.regex: if args.spec: ms = MatchSpec(' '.join(args.regex.split('='))) else: regex = args.regex if args.full_name: regex = r'^%s$' % regex try: pat = re.compile(regex, re.I) except re.error as e: common.error_and_exit( "'%s' is not a valid regex pattern (exception: %s)" % (regex, e), json=args.json, error_type="ValueError") prefix = common.get_prefix(args) import conda.config import conda.install linked = conda.install.linked(prefix) extracted = set() for pkgs_dir in conda.config.pkgs_dirs: extracted.update(conda.install.extracted(pkgs_dir)) # XXX: Make this work with more than one platform platform = args.platform or '' if platform and platform != config.subdir: args.unknown = False common.ensure_override_channels_requires_channel(args, dashc=False, json=args.json) channel_urls = args.channel or () if args.use_local: from conda.fetch import fetch_index from conda.utils import url_path try: from conda_build.config import croot except ImportError: common.error_and_exit("you need to have 'conda-build >= 1.7.1' installed" " to use the --use-local option", json=args.json, error_type="RuntimeError") # remove the cache such that a refetch is made, # this is necessary because we add the local build repo URL fetch_index.cache = {} index = common.get_index_trap(channel_urls=[url_path(croot)] + list(channel_urls), prepend=not args.override_channels, use_cache=args.use_index_cache, unknown=args.unknown, json=args.json, platform=args.platform, offline=args.offline) else: index = common.get_index_trap(channel_urls=channel_urls, prepend=not args.override_channels, platform=args.platform, use_cache=args.use_index_cache, unknown=args.unknown, json=args.json, offline=args.offline) r = Resolve(index) if args.canonical: json = [] else: json = {} names = [] for name in sorted(r.groups): if args.reverse_dependency: ms_name = ms for pkg in r.groups[name]: for dep in r.ms_depends(pkg): if pat.search(dep.name): names.append((name, Package(pkg, r.index[pkg]))) else: if pat and pat.search(name) is None: continue if ms and name != ms.name: continue if ms: ms_name = ms else: ms_name = MatchSpec(name) pkgs = sorted(r.get_pkgs(ms_name)) names.append((name, pkgs)) if args.reverse_dependency: new_names = [] old = None for name, pkg in sorted(names, key=lambda x:(x[0], x[1].name, x[1])): if name == old: new_names[-1][1].append(pkg) else: new_names.append((name, [pkg])) old = name names = new_names for name, pkgs in names: if args.reverse_dependency: disp_name = pkgs[0].name else: disp_name = name if args.names_only and not args.outdated: print(name) continue if not args.canonical: json[name] = [] if args.outdated: vers_inst = [dist.rsplit('-', 2)[1] for dist in linked if dist.rsplit('-', 2)[0] == name] if not vers_inst: continue assert len(vers_inst) == 1, name if not pkgs: continue latest = pkgs[-1] if latest.version == vers_inst[0]: continue if args.names_only: print(name) continue for pkg in pkgs: dist = pkg.fn[:-8] if args.canonical: if not args.json: print(dist) else: json.append(dist) continue if platform and platform != config.subdir: inst = ' ' elif dist in linked: inst = '*' elif dist in extracted: inst = '.' else: inst = ' ' if not args.json: print('%-25s %s %-15s %15s %-15s %s' % ( disp_name, inst, pkg.version, pkg.build, config.canonical_channel_name(pkg.channel), common.disp_features(r.features(pkg.fn)), )) disp_name = '' else: data = {} data.update(pkg.info) data.update({ 'fn': pkg.fn, 'installed': inst == '*', 'extracted': inst in '*.', 'version': pkg.version, 'build': pkg.build, 'build_number': pkg.build_number, 'channel': config.canonical_channel_name(pkg.channel), 'full_channel': pkg.channel, 'features': list(r.features(pkg.fn)), 'license': pkg.info.get('license'), 'size': pkg.info.get('size'), 'depends': pkg.info.get('depends'), 'type': pkg.info.get('type') }) if data['type'] == 'app': data['icon'] = make_icon_url(pkg.info) json[name].append(data) if args.json: common.stdout_json(json)
def execute_search(args, parser): import re from conda.resolve import Resolve if args.reverse_dependency: if not args.regex: parser.error("--reverse-dependency requires at least one package name") if args.spec: parser.error("--reverse-dependency does not work with --spec") pat = None ms = None if args.regex: if args.spec: ms = ' '.join(args.regex.split('=')) else: regex = args.regex if args.full_name: regex = r'^%s$' % regex try: pat = re.compile(regex, re.I) except re.error as e: common.error_and_exit( "'%s' is not a valid regex pattern (exception: %s)" % (regex, e), json=args.json, error_type="ValueError") prefix = common.get_prefix(args) import conda.config import conda.install linked = conda.install.linked(prefix) extracted = set() for pkgs_dir in conda.config.pkgs_dirs: extracted.update(conda.install.extracted(pkgs_dir)) # XXX: Make this work with more than one platform platform = args.platform or '' if platform and platform != config.subdir: args.unknown = False common.ensure_override_channels_requires_channel(args, dashc=False, json=args.json) channel_urls = args.channel or () if args.use_local: from conda.fetch import fetch_index from conda.utils import url_path try: from conda_build.config import croot except ImportError: common.error_and_exit("you need to have 'conda-build >= 1.7.1' installed" " to use the --use-local option", json=args.json, error_type="RuntimeError") # remove the cache such that a refetch is made, # this is necessary because we add the local build repo URL fetch_index.cache = {} if exists(croot): channel_urls = [url_path(croot)] + list(channel_urls) index = common.get_index_trap(channel_urls=channel_urls, prepend=not args.override_channels, use_cache=args.use_index_cache, unknown=args.unknown, prefix=prefix, json=args.json, platform=args.platform, offline=args.offline) else: index = common.get_index_trap(channel_urls=channel_urls, prepend=not args.override_channels, platform=args.platform, use_cache=args.use_index_cache, prefix=prefix, unknown=args.unknown, json=args.json, offline=args.offline) r = Resolve(index) if args.canonical: json = [] else: json = {} names = [] for name in sorted(r.groups): if '@' in name: continue if args.reverse_dependency: ms_name = ms for pkg in r.groups[name]: for dep in r.ms_depends(pkg): if pat.search(dep.name): names.append((name, Package(pkg, r.index[pkg]))) else: if pat and pat.search(name) is None: continue if ms and name != ms.name: continue if ms: ms_name = ms else: ms_name = name pkgs = sorted(r.get_pkgs(ms_name)) names.append((name, pkgs)) if args.reverse_dependency: new_names = [] old = None for name, pkg in sorted(names, key=lambda x:(x[0], x[1].name, x[1])): if name == old: new_names[-1][1].append(pkg) else: new_names.append((name, [pkg])) old = name names = new_names for name, pkgs in names: if args.reverse_dependency: disp_name = pkgs[0].name else: disp_name = name if args.names_only and not args.outdated: print(name) continue if not args.canonical: json[name] = [] if args.outdated: vers_inst = [dist.rsplit('-', 2)[1] for dist in linked if dist.rsplit('-', 2)[0] == name] if not vers_inst: continue assert len(vers_inst) == 1, name if not pkgs: continue latest = pkgs[-1] if latest.version == vers_inst[0]: continue if args.names_only: print(name) continue for pkg in pkgs: dist = pkg.fn[:-8] if args.canonical: if not args.json: print(dist) else: json.append(dist) continue if platform and platform != config.subdir: inst = ' ' elif dist in linked: inst = '*' elif dist in extracted: inst = '.' else: inst = ' ' if not args.json: print('%-25s %s %-15s %15s %-15s %s' % ( disp_name, inst, pkg.version, pkg.build, config.canonical_channel_name(pkg.channel), common.disp_features(r.features(pkg.fn)), )) disp_name = '' else: data = {} data.update(pkg.info) data.update({ 'fn': pkg.fn, 'installed': inst == '*', 'extracted': inst in '*.', 'version': pkg.version, 'build': pkg.build, 'build_number': pkg.build_number, 'channel': config.canonical_channel_name(pkg.channel), 'full_channel': pkg.channel, 'features': list(r.features(pkg.fn)), 'license': pkg.info.get('license'), 'size': pkg.info.get('size'), 'depends': pkg.info.get('depends'), 'type': pkg.info.get('type') }) if data['type'] == 'app': data['icon'] = make_icon_url(pkg.info) json[name].append(data) if args.json: common.stdout_json(json)
def execute(args, parser): import os from os.path import basename, dirname, isdir, join import conda import conda.config as config import conda.misc as misc from conda.cli.main_init import is_initialized from conda.api import get_package_versions, app_is_installed from conda.install import is_linked if args.args: results = defaultdict(list) for arg in args.args: if isfile(arg): from conda.misc import which_package path = arg for dist in which_package(path): if args.json: results[arg].append(dist) else: print('%-50s %s' % (path, dist)) elif arg.endswith('.tar.bz2'): info = None for prefix in misc.list_prefixes(): info = is_linked(prefix, arg[:-8]) if info: break if not info: if args.json: results[arg] = {'installed': []} else: print("Package %s is not installed" % arg) continue info['installed'] = app_is_installed(arg) if args.json: results[arg] = info else: print(arg) print(' %-15s %30s' % ('installed', bool(info.get('installed')))) for key in ('name', 'version', 'build', 'license', 'platform', 'arch', 'size', 'summary'): print(' %-15s %30s' % (key, info.get(key))) else: if args.json: for pkg in get_package_versions(arg): results[arg].append(pkg._asdict()) else: show_pkg_info(arg) if args.json: common.stdout_json(results) return options = 'envs', 'system', 'license' try: import requests requests_version = requests.__version__ except ImportError: requests_version = "could not import" except Exception as e: requests_version = "Error %s" % e try: import conda_build except ImportError: conda_build_version = "not installed" except Exception as e: conda_build_version = "Error %s" % e else: conda_build_version = conda_build.__version__ info_dict = dict( platform=config.subdir, conda_version=conda.__version__, conda_build_version=conda_build_version, root_prefix=config.root_dir, root_writable=config.root_writable, pkgs_dirs=config.pkgs_dirs, envs_dirs=config.envs_dirs, default_prefix=config.default_prefix, channels=config.get_channel_urls(), rc_path=config.rc_path, is_foreign=bool(config.foreign), envs=[], python_version='.'.join(map(str, sys.version_info)), requests_version=requests_version, ) if args.all or args.json: for option in options: setattr(args, option, True) t_pat = re.compile(r'binstar\.org/(t/[0-9a-f\-]{4,})') info_dict['channels_disp'] = [ t_pat.sub('binstar.org/t/<TOKEN>', c) for c in info_dict['channels'] ] if args.all or all(not getattr(args, opt) for opt in options): for key in 'pkgs_dirs', 'envs_dirs', 'channels_disp': info_dict['_' + key] = ('\n' + 24 * ' ').join(info_dict[key]) info_dict['_rtwro'] = ('writable' if info_dict['root_writable'] else 'read only') print("""\ Current conda install: platform : %(platform)s conda version : %(conda_version)s conda-build version : %(conda_build_version)s python version : %(python_version)s requests version : %(requests_version)s root environment : %(root_prefix)s (%(_rtwro)s) default environment : %(default_prefix)s envs directories : %(_envs_dirs)s package cache : %(_pkgs_dirs)s channel URLs : %(_channels_disp)s config file : %(rc_path)s is foreign system : %(is_foreign)s """ % info_dict) if not is_initialized(): print("""\ # NOTE: # root directory '%s' uninitalized, # use 'conda init' to initialize.""" % config.root_dir) del info_dict['channels_disp'] if args.envs: if not args.json: print("# conda environments:") print("#") def disp_env(prefix): fmt = '%-20s %s %s' default = '*' if prefix == config.default_prefix else ' ' name = (config.root_env_name if prefix == config.root_dir else basename(prefix)) if not args.json: print(fmt % (name, default, prefix)) for prefix in misc.list_prefixes(): disp_env(prefix) if prefix != config.root_dir: info_dict['envs'].append(prefix) print() if args.system and not args.json: from conda.cli.find_commands import find_commands, find_executable print("sys.version: %s..." % (sys.version[:40])) print("sys.prefix: %s" % sys.prefix) print("sys.executable: %s" % sys.executable) print("conda location: %s" % dirname(conda.__file__)) for cmd in sorted(set(find_commands() + ['build'])): print("conda-%s: %s" % (cmd, find_executable(cmd))) print() evars = [ 'PATH', 'PYTHONPATH', 'PYTHONHOME', 'CONDA_DEFAULT_ENV', 'CIO_TEST', 'CONDA_ENVS_PATH' ] if config.platform == 'linux': evars.append('LD_LIBRARY_PATH') elif config.platform == 'osx': evars.append('DYLD_LIBRARY_PATH') for ev in sorted(evars): print("%s: %s" % (ev, os.getenv(ev, '<not set>'))) print() if args.license and not args.json: try: from _license import show_info show_info() except ImportError: print("""\ WARNING: could import _license.show_info # try: # $ conda install -n root _license""") if args.json: common.stdout_json(info_dict)
def execute_search(args, parser): import re import sys from conda.api import get_index from conda.resolve import MatchSpec, Resolve pat = None ms = None if args.regex: if args.spec: ms = MatchSpec(' '.join(args.regex.split('='))) else: try: pat = re.compile(args.regex, re.I) except re.error as e: common.error_and_exit("%r is not a valid regex pattern (exception: %s)" % (args.regex, e), json=args.json, error_type="ValueError") prefix = common.get_prefix(args) import conda.config import conda.install linked = conda.install.linked(prefix) extracted = set() for pkgs_dir in conda.config.pkgs_dirs: extracted.update(conda.install.extracted(pkgs_dir)) # XXX: Make this work with more than one platform platform = args.platform or '' if platform and platform != config.subdir: args.unknown = False common.ensure_override_channels_requires_channel(args, dashc=False, json=args.json) channel_urls = args.channel or () index = common.get_index_trap(channel_urls=channel_urls, prepend=not args.override_channels, platform=args.platform, use_cache=args.use_index_cache, unknown=args.unknown, json=args.json) r = Resolve(index) if args.canonical: json = [] else: json = {} for name in sorted(r.groups): disp_name = name if pat and pat.search(name) is None: continue if ms and name != ms.name: continue if ms: ms_name = ms else: ms_name = MatchSpec(name) if not args.canonical: json[name] = [] if args.outdated: vers_inst = [dist.rsplit('-', 2)[1] for dist in linked if dist.rsplit('-', 2)[0] == name] if not vers_inst: continue assert len(vers_inst) == 1, name pkgs = sorted(r.get_pkgs(ms_name)) if not pkgs: continue latest = pkgs[-1] if latest.version == vers_inst[0]: continue for pkg in sorted(r.get_pkgs(ms_name)): dist = pkg.fn[:-8] if args.canonical: if not args.json: print(dist) else: json.append(dist) continue if dist in linked: inst = '*' elif dist in extracted: inst = '.' else: inst = ' ' if not args.json: print('%-25s %s %-15s %15s %-15s %s' % ( disp_name, inst, pkg.version, pkg.build, config.canonical_channel_name(pkg.channel), common.disp_features(r.features(pkg.fn)), )) disp_name = '' else: data = {} data.update(pkg.info) data.update({ 'fn': pkg.fn, 'installed': inst == '*', 'extracted': inst in '*.', 'version': pkg.version, 'build': pkg.build, 'build_number': pkg.build_number, 'channel': config.canonical_channel_name(pkg.channel), 'full_channel': pkg.channel, 'features': list(r.features(pkg.fn)), 'license': pkg.info.get('license'), 'size': pkg.info.get('size'), 'depends': pkg.info.get('depends'), 'type': pkg.info.get('type') }) if data['type'] == 'app': data['icon'] = make_icon_url(pkg.info) json[name].append(data) if args.json: common.stdout_json(json)
def test_make_install_plan(self): python_exe = "/darwin/bin/python" python_version = "2.6.10" site_packages_dir = "/darwin/lib/python2.6/site-packages" with patch("conda.core.initialize._get_python_info", return_value=( python_exe, python_version, site_packages_dir )): plan = make_install_plan("/darwin") stdout_json(plan) if on_win: assert plan == [ { "function": "make_entry_point_exe", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\Scripts\\conda.exe" } }, { "function": "make_entry_point_exe", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\Scripts\\conda-env.exe" } }, { "function": "make_entry_point", "kwargs": { "conda_prefix": "/darwin", "func": "main", "module": "conda.cli", "target_path": "/darwin\\Scripts\\conda-script.py" } }, { "function": "make_entry_point", "kwargs": { "conda_prefix": "/darwin", "func": "main", "module": "conda_env.cli.main", "target_path": "/darwin\\Scripts\\conda-env-script.py" } }, { "function": "install_condabin_conda_bat", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\condabin\\conda.bat" } }, { 'function': 'install_library_bin_conda_bat', 'kwargs': { 'conda_prefix': '/darwin', 'target_path': '/darwin\\Library\\bin\\conda.bat' } }, { "function": "install_condabin_conda_activate_bat", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\condabin\\_conda_activate.bat" } }, { 'function': 'install_condabin_rename_tmp_bat', 'kwargs': {'target_path': '/darwin\\condabin\\rename_tmp.bat', 'conda_prefix': '/darwin' } }, { "function": "install_condabin_conda_auto_activate_bat", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\condabin\\conda_auto_activate.bat" } }, { "function": "install_condabin_hook_bat", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\condabin\\conda_hook.bat" } }, { "function": "install_Scripts_activate_bat", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\Scripts\\activate.bat" } }, { "function": "install_activate_bat", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\condabin\\activate.bat" } }, { "function": "install_deactivate_bat", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\condabin\\deactivate.bat" } }, { "function": "install_activate", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\Scripts\\activate" } }, { "function": "install_deactivate", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\Scripts\\deactivate" } }, { "function": "install_conda_sh", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\etc\\profile.d\\conda.sh" } }, { "function": "install_conda_fish", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\etc\\fish\\conf.d\\conda.fish" } }, { 'function': 'install_conda_psm1', 'kwargs': { 'target_path': '/darwin\\shell\\condabin\\Conda.psm1', 'conda_prefix': '/darwin' } }, { 'function': 'install_conda_hook_ps1', 'kwargs': { 'target_path': '/darwin\\shell\\condabin\\conda-hook.ps1', 'conda_prefix': '/darwin' } }, { "function": "install_conda_xsh", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin/lib/python2.6/site-packages\\xonsh\\conda.xsh" } }, { "function": "install_conda_csh", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin\\etc\\profile.d\\conda.csh" } } ] else: assert plan == [ { "function": "make_entry_point", "kwargs": { "conda_prefix": "/darwin", "func": "main", "module": "conda.cli", "target_path": "/darwin/condabin/conda" } }, { "function": "make_entry_point", "kwargs": { "conda_prefix": "/darwin", "func": "main", "module": "conda.cli", "target_path": "/darwin/bin/conda" } }, { "function": "make_entry_point", "kwargs": { "conda_prefix": "/darwin", "func": "main", "module": "conda_env.cli.main", "target_path": "/darwin/bin/conda-env" } }, { "function": "install_activate", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin/bin/activate" } }, { "function": "install_deactivate", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin/bin/deactivate" } }, { "function": "install_conda_sh", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin/etc/profile.d/conda.sh" } }, { "function": "install_conda_fish", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin/etc/fish/conf.d/conda.fish" } }, { 'function': 'install_conda_psm1', 'kwargs': { 'target_path': '/darwin/shell/condabin/Conda.psm1', 'conda_prefix': '/darwin' } }, { 'function': 'install_conda_hook_ps1', 'kwargs': { 'target_path': '/darwin/shell/condabin/conda-hook.ps1', 'conda_prefix': '/darwin' } }, { "function": "install_conda_xsh", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin/lib/python2.6/site-packages/xonsh/conda.xsh" } }, { "function": "install_conda_csh", "kwargs": { "conda_prefix": "/darwin", "target_path": "/darwin/etc/profile.d/conda.csh" } } ]
def execute(args, parser): import os from os.path import dirname import conda import conda.config as config from conda.resolve import Resolve from conda.cli.main_init import is_initialized from conda.api import get_index if args.root: if args.json: common.stdout_json({'root_prefix': config.root_dir}) else: print(config.root_dir) return if args.packages: index = get_index() r = Resolve(index) if args.json: common.stdout_json({ package: [p._asdict() for p in sorted(r.get_pkgs(common.arg2spec(package)))] for package in args.packages }) else: for package in args.packages: versions = r.get_pkgs(common.arg2spec(package)) for pkg in sorted(versions): pretty_package(pkg) return options = 'envs', 'system', 'license' try: import requests requests_version = requests.__version__ except ImportError: requests_version = "could not import" except Exception as e: requests_version = "Error %s" % e try: import conda_build except ImportError: conda_build_version = "not installed" except Exception as e: conda_build_version = "Error %s" % e else: conda_build_version = conda_build.__version__ # this is a hack associated with channel weight until we get the package cache reworked # in a future release # for now, just ordering the channels for display in a semi-plausible way d = defaultdict(list) any(d[v[1]].append(k) for k, v in iteritems(config.get_channel_urls())) channels = list(chain.from_iterable(d[q] for q in sorted(d, reverse=True))) info_dict = dict( platform=config.subdir, conda_version=conda.__version__, conda_build_version=conda_build_version, root_prefix=config.root_dir, root_writable=config.root_writable, pkgs_dirs=config.pkgs_dirs, envs_dirs=config.envs_dirs, default_prefix=config.default_prefix, channels=channels, rc_path=config.rc_path, user_rc_path=config.user_rc_path, sys_rc_path=config.sys_rc_path, is_foreign=bool(config.foreign), envs=[], python_version='.'.join(map(str, sys.version_info)), requests_version=requests_version, ) if args.unsafe_channels: if not args.json: print("\n".join(info_dict["channels"])) else: print(json.dumps({"channels": info_dict["channels"]})) return 0 else: info_dict['channels'] = [config.hide_binstar_tokens(c) for c in info_dict['channels']] if args.all or args.json: for option in options: setattr(args, option, True) if args.all or all(not getattr(args, opt) for opt in options): for key in 'pkgs_dirs', 'envs_dirs', 'channels': info_dict['_' + key] = ('\n' + 24 * ' ').join(info_dict[key]) info_dict['_rtwro'] = ('writable' if info_dict['root_writable'] else 'read only') print("""\ Current conda install: platform : %(platform)s conda version : %(conda_version)s conda-build version : %(conda_build_version)s python version : %(python_version)s requests version : %(requests_version)s root environment : %(root_prefix)s (%(_rtwro)s) default environment : %(default_prefix)s envs directories : %(_envs_dirs)s package cache : %(_pkgs_dirs)s channel URLs : %(_channels)s config file : %(rc_path)s is foreign system : %(is_foreign)s """ % info_dict) if not is_initialized(): print("""\ # NOTE: # root directory '%s' is uninitialized""" % config.root_dir) if args.envs: common.handle_envs_list(info_dict['envs'], not args.json) if args.system and not args.json: from conda.cli.find_commands import find_commands, find_executable print("sys.version: %s..." % (sys.version[:40])) print("sys.prefix: %s" % sys.prefix) print("sys.executable: %s" % sys.executable) print("conda location: %s" % dirname(conda.__file__)) for cmd in sorted(set(find_commands() + ['build'])): print("conda-%s: %s" % (cmd, find_executable('conda-' + cmd))) print("user site dirs: ", end='') site_dirs = get_user_site() if site_dirs: print(site_dirs[0]) else: print() for site_dir in site_dirs[1:]: print(' %s' % site_dir) print() evars = ['PATH', 'PYTHONPATH', 'PYTHONHOME', 'CONDA_DEFAULT_ENV', 'CIO_TEST', 'CONDA_ENVS_PATH'] if config.platform == 'linux': evars.append('LD_LIBRARY_PATH') elif config.platform == 'osx': evars.append('DYLD_LIBRARY_PATH') for ev in sorted(evars): print("%s: %s" % (ev, os.getenv(ev, '<not set>'))) print() if args.license and not args.json: try: from _license import show_info show_info() except ImportError: print("""\ WARNING: could not import _license.show_info # try: # $ conda install -n root _license""") if args.json: common.stdout_json(info_dict)
def execute(args, parser): from conda import config from conda.api import get_package_versions, app_is_installed from conda.install import is_linked if args.args: results = defaultdict(list) for arg in args.args: if isfile(arg): from conda.misc import which_package path = arg for dist in which_package(path): if args.json: results[arg].append(dist) else: print('%-50s %s' % (path, dist)) elif arg.endswith('.tar.bz2'): info = is_linked(config.root_dir, arg[:-8]) if not info: if args.json: results[arg] = { 'installed': [] } else: print("Package %s is not installed" % arg) continue info['installed'] = app_is_installed(arg) if args.json: results[arg] = info else: print(arg) print(' %-15s %30s' % ('installed', bool(info.get('installed')))) for key in ('name', 'version', 'build', 'license', 'platform', 'arch', 'size', 'summary'): print(' %-15s %30s' % (key, info.get(key))) else: if args.json: for pkg in get_package_versions(arg): results[arg].append(pkg._asdict()) else: show_pkg_info(arg) if args.json: common.stdout_json(results) return import os from os.path import basename, dirname, isdir, join import conda import conda.config as config from conda.cli.main_init import is_initialized options = 'envs', 'system', 'license' info_dict = dict(platform=config.subdir, conda_version=conda.__version__, root_prefix=config.root_dir, root_writable=config.root_writable, pkgs_dirs=config.pkgs_dirs, envs_dirs=config.envs_dirs, default_prefix=config.default_prefix, channels=config.get_channel_urls(), rc_path=config.rc_path, is_foreign=bool(config.foreign), envs=[], python_version='.'.join(map(str, sys.version_info)), ) if args.all or args.json: for option in options: setattr(args, option, True) t_pat = re.compile(r'binstar\.org/(t/[0-9a-f\-]{4,})') info_dict['channels_disp'] = [t_pat.sub('binstar.org/t/<TOKEN>', c) for c in info_dict['channels']] if args.all or all(not getattr(args, opt) for opt in options): for key in 'pkgs_dirs', 'envs_dirs', 'channels_disp': info_dict['_' + key] = ('\n' + 24 * ' ').join(info_dict[key]) info_dict['_rtwro'] = ('writable' if info_dict['root_writable'] else 'read only') print("""\ Current conda install: platform : %(platform)s conda version : %(conda_version)s python version : %(python_version)s root environment : %(root_prefix)s (%(_rtwro)s) default environment : %(default_prefix)s envs directories : %(_envs_dirs)s package cache : %(_pkgs_dirs)s channel URLs : %(_channels_disp)s config file : %(rc_path)s is foreign system : %(is_foreign)s """ % info_dict) if not is_initialized(): print("""\ # NOTE: # root directory '%s' uninitalized, # use 'conda init' to initialize.""" % config.root_dir) del info_dict['channels_disp'] if args.envs: if not args.json: print("# conda environments:") print("#") def disp_env(prefix): fmt = '%-20s %s %s' default = '*' if prefix == config.default_prefix else ' ' name = (config.root_env_name if prefix == config.root_dir else basename(prefix)) if not args.json: print(fmt % (name, default, prefix)) for envs_dir in config.envs_dirs: if not isdir(envs_dir): continue for dn in sorted(os.listdir(envs_dir)): if dn.startswith('.'): continue prefix = join(envs_dir, dn) if isdir(prefix): prefix = join(envs_dir, dn) disp_env(prefix) info_dict['envs'].append(prefix) disp_env(config.root_dir) print() if args.system and not args.json: from conda.cli.find_commands import find_commands, find_executable print("sys.version: %s..." % (sys.version[:40])) print("sys.prefix: %s" % sys.prefix) print("sys.executable: %s" % sys.executable) print("conda location: %s" % dirname(conda.__file__)) for cmd in sorted(set(find_commands() + ['build'])): print("conda-%s: %s" % (cmd, find_executable(cmd))) print() evars = ['PATH', 'PYTHONPATH', 'PYTHONHOME', 'CONDA_DEFAULT_ENV', 'CIO_TEST', 'CONDA_ENVS_PATH'] if config.platform == 'linux': evars.append('LD_LIBRARY_PATH') elif config.platform == 'osx': evars.append('DYLD_LIBRARY_PATH') for ev in sorted(evars): print("%s: %s" % (ev, os.getenv(ev, '<not set>'))) print() if args.license and not args.json: try: from _license import show_info show_info() except ImportError: print("""\ WARNING: could import _license.show_info # try: # $ conda install -n root _license""") if args.json: common.stdout_json(info_dict)
def execute(args, parser): import os from os.path import dirname import conda import conda.config as config from conda.resolve import Resolve from conda.cli.main_init import is_initialized from conda.api import get_index, get_package_versions if args.root: if args.json: common.stdout_json({'root_prefix': config.root_dir}) else: print(config.root_dir) return if args.packages: if args.json: results = defaultdict(list) for arg in args.packages: for pkg in get_package_versions(arg): results[arg].append(pkg._asdict()) common.stdout_json(results) return index = get_index() r = Resolve(index) specs = map(common.arg2spec, args.packages) for spec in specs: versions = r.get_pkgs(spec) for pkg in sorted(versions): pretty_package(pkg) return options = 'envs', 'system', 'license' try: import requests requests_version = requests.__version__ except ImportError: requests_version = "could not import" except Exception as e: requests_version = "Error %s" % e try: import conda_build except ImportError: conda_build_version = "not installed" except Exception as e: conda_build_version = "Error %s" % e else: conda_build_version = conda_build.__version__ # this is a hack associated with channel weight until we get the package cache reworked # in a future release # for now, just ordering the channels for display in a semi-plausible way d = defaultdict(list) any(d[v[1]].append(k) for k, v in iteritems(config.get_channel_urls())) channels = list(chain.from_iterable(d[q] for q in sorted(d, reverse=True))) info_dict = dict( platform=config.subdir, conda_version=conda.__version__, conda_build_version=conda_build_version, root_prefix=config.root_dir, root_writable=config.root_writable, pkgs_dirs=config.pkgs_dirs, envs_dirs=config.envs_dirs, default_prefix=config.default_prefix, channels=channels, rc_path=config.rc_path, user_rc_path=config.user_rc_path, sys_rc_path=config.sys_rc_path, is_foreign=bool(config.foreign), envs=[], python_version='.'.join(map(str, sys.version_info)), requests_version=requests_version, ) if args.unsafe_channels: if not args.json: print("\n".join(info_dict["channels"])) else: print(json.dumps({"channels": info_dict["channels"]})) return 0 else: info_dict['channels'] = [ config.hide_binstar_tokens(c) for c in info_dict['channels'] ] if args.all or args.json: for option in options: setattr(args, option, True) if args.all or all(not getattr(args, opt) for opt in options): for key in 'pkgs_dirs', 'envs_dirs', 'channels': info_dict['_' + key] = ('\n' + 24 * ' ').join(info_dict[key]) info_dict['_rtwro'] = ('writable' if info_dict['root_writable'] else 'read only') print("""\ Current conda install: platform : %(platform)s conda version : %(conda_version)s conda-build version : %(conda_build_version)s python version : %(python_version)s requests version : %(requests_version)s root environment : %(root_prefix)s (%(_rtwro)s) default environment : %(default_prefix)s envs directories : %(_envs_dirs)s package cache : %(_pkgs_dirs)s channel URLs : %(_channels)s config file : %(rc_path)s is foreign system : %(is_foreign)s """ % info_dict) if not is_initialized(): print("""\ # NOTE: # root directory '%s' is uninitialized""" % config.root_dir) if args.envs: common.handle_envs_list(info_dict['envs'], not args.json) if args.system and not args.json: from conda.cli.find_commands import find_commands, find_executable print("sys.version: %s..." % (sys.version[:40])) print("sys.prefix: %s" % sys.prefix) print("sys.executable: %s" % sys.executable) print("conda location: %s" % dirname(conda.__file__)) for cmd in sorted(set(find_commands() + ['build'])): print("conda-%s: %s" % (cmd, find_executable('conda-' + cmd))) print("user site dirs: ", end='') site_dirs = get_user_site() if site_dirs: print(site_dirs[0]) else: print() for site_dir in site_dirs[1:]: print(' %s' % site_dir) print() evars = [ 'PATH', 'PYTHONPATH', 'PYTHONHOME', 'CONDA_DEFAULT_ENV', 'CIO_TEST', 'CONDA_ENVS_PATH' ] if config.platform == 'linux': evars.append('LD_LIBRARY_PATH') elif config.platform == 'osx': evars.append('DYLD_LIBRARY_PATH') for ev in sorted(evars): print("%s: %s" % (ev, os.getenv(ev, '<not set>'))) print() if args.license and not args.json: try: from _license import show_info show_info() except ImportError: print("""\ WARNING: could not import _license.show_info # try: # $ conda install -n root _license""") if args.json: common.stdout_json(info_dict)