def _do_install_dependency(logger, project, dependency, upgrade, force_reinstall, target_dir, log_file):
    batch = isinstance(dependency, collections.Iterable)

    pip_command_line = list()
    pip_command_line.extend(PIP_EXEC_STANZA)
    pip_command_line.append("install")
    pip_command_line.extend(build_pip_install_options(project.get_property("install_dependencies_index_url"),
                                                      project.get_property("install_dependencies_extra_index_url"),
                                                      upgrade,
                                                      project.get_property(
                                                          "install_dependencies_insecure_installation"),
                                                      force_reinstall,
                                                      target_dir,
                                                      project.get_property("verbose"),
                                                      project.get_property("install_dependencies_trusted_host")
                                                      ))
    pip_command_line.extend(as_pip_install_target(dependency))
    logger.debug("Invoking pip: %s", pip_command_line)
    exit_code = execute_command(pip_command_line, log_file, env=os.environ, shell=False)

    if exit_code != 0:
        if batch:
            dependency_name = " batch dependencies."
        else:
            dependency_name = " dependency '%s'." % dependency.name

        if project.get_property("verbose"):
            print_file_content(log_file)
            raise BuildFailedException("Unable to install%s" % dependency_name)
        else:
            raise BuildFailedException("Unable to install%s See %s for details.",
                                       dependency_name,
                                       log_file)
Beispiel #2
0
def prepare(project, logger):
    target_directory = project.expand_path("$dir_target")
    if not os.path.exists(target_directory):
        logger.debug("Creating target directory %s", target_directory)
        os.mkdir(target_directory)

    reports_directory = project.expand_path("$dir_reports")
    if not os.path.exists(reports_directory):
        logger.debug("Creating reports directory %s", reports_directory)
        os.mkdir(reports_directory)

    plugin_dependency_versions = get_package_version(
        project.plugin_dependencies, logger)
    for plugin_dependency in project.plugin_dependencies:
        logger.debug("Processing plugin dependency %s" % plugin_dependency)
        if plugin_dependency.name.lower() not in plugin_dependency_versions or not \
                version_satisfies_spec(plugin_dependency.version,
                                       plugin_dependency_versions[plugin_dependency.name.lower()]):
            logger.info("Installing plugin dependency %s" % plugin_dependency)
            log_file = project.expand_path(
                "$dir_reports",
                safe_log_file_name("dependency_%s_install.log" %
                                   plugin_dependency))
            pip_install(as_pip_install_target(plugin_dependency),
                        index_url=project.get_property(
                            "install_dependencies_index_url"),
                        extra_index_url=project.get_property(
                            "install_dependencies_extra_index_url"),
                        verbose=project.get_property("verbose"),
                        logger=logger,
                        force_reinstall=plugin_dependency.url is not None,
                        outfile_name=log_file,
                        error_file_name=log_file)
Beispiel #3
0
def prepare(project, logger):
    target_directory = project.expand_path("$dir_target")
    if not os.path.exists(target_directory):
        logger.debug("Creating target directory %s", target_directory)
        os.mkdir(target_directory)

    reports_directory = project.expand_path("$dir_reports")
    if not os.path.exists(reports_directory):
        logger.debug("Creating reports directory %s", reports_directory)
        os.mkdir(reports_directory)

    plugin_dependency_versions = get_package_version(project.plugin_dependencies, logger)
    for plugin_dependency in project.plugin_dependencies:
        logger.debug("Processing plugin dependency %s" % plugin_dependency)
        if plugin_dependency.name.lower() not in plugin_dependency_versions or not \
                version_satisfies_spec(plugin_dependency.version,
                                       plugin_dependency_versions[plugin_dependency.name.lower()]):
            logger.info("Installing plugin dependency %s" % plugin_dependency)
            log_file = project.expand_path("$dir_reports",
                                           safe_log_file_name("dependency_%s_install.log" % plugin_dependency))
            pip_install(as_pip_install_target(plugin_dependency),
                        index_url=project.get_property("install_dependencies_index_url"),
                        extra_index_url=project.get_property("install_dependencies_extra_index_url"),
                        verbose=project.get_property("verbose"), logger=logger,
                        force_reinstall=plugin_dependency.url is not None, outfile_name=log_file,
                        error_file_name=log_file)
Beispiel #4
0
def _do_install_dependency(logger, project, dependency, upgrade,
                           force_reinstall, target_dir, log_file):
    batch = isinstance(dependency, collections.Iterable)

    pip_command_line = list()
    pip_command_line.extend(PIP_EXEC_STANZA)
    pip_command_line.append("install")
    pip_command_line.extend(
        build_pip_install_options(
            project.get_property("install_dependencies_index_url"),
            project.get_property("install_dependencies_extra_index_url"),
            upgrade,
            project.get_property("install_dependencies_insecure_installation"),
            force_reinstall, target_dir, project.get_property("verbose"),
            project.get_property("install_dependencies_trusted_host")))
    pip_command_line.extend(as_pip_install_target(dependency))
    logger.debug("Invoking pip: %s", pip_command_line)
    exit_code = execute_command(pip_command_line,
                                log_file,
                                env=os.environ,
                                shell=False)

    if exit_code != 0:
        if batch:
            dependency_name = " batch dependencies."
        else:
            dependency_name = " dependency '%s'." % dependency.name

        if project.get_property("verbose"):
            print_file_content(log_file)
            raise BuildFailedException("Unable to install%s" % dependency_name)
        else:
            raise BuildFailedException(
                "Unable to install%s See %s for details.", dependency_name,
                log_file)
def list_dependencies(project):
    print(
        "\n".join(
            map(
                lambda d: "{0}".format(" ".join(as_pip_install_target(d))),
                project.build_dependencies + project.dependencies,
            )
        )
    )
def prepare(project, logger):
    target_directory = project.expand_path("$dir_target")
    if not os.path.exists(target_directory):
        logger.debug("Creating target directory %s", target_directory)
        os.mkdir(target_directory)

    reports_directory = project.expand_path("$dir_reports")
    if not os.path.exists(reports_directory):
        logger.debug("Creating reports directory %s", reports_directory)
        os.mkdir(reports_directory)

    plugin_dependency_versions = pip_utils.get_package_version(
        project.plugin_dependencies, logger)
    for plugin_dependency in project.plugin_dependencies:
        logger.debug("Processing plugin dependency %s" % plugin_dependency)
        dependency_name = plugin_dependency.name.lower()
        no_version_installed = dependency_name not in plugin_dependency_versions
        if not no_version_installed:
            version_satisfies = pip_utils.version_satisfies_spec(
                plugin_dependency.version,
                plugin_dependency_versions[dependency_name])
        if no_version_installed or not version_satisfies:
            logger.info("Installing plugin dependency %s" % plugin_dependency)
            log_file = project.expand_path(
                "$dir_reports",
                safe_log_file_name("dependency_%s_install.log" %
                                   plugin_dependency))
            install_targets = pip_utils.as_pip_install_target(
                plugin_dependency)
            result = pip_utils.pip_install(
                install_targets=install_targets,
                index_url=project.get_property(
                    "install_dependencies_index_url"),
                extra_index_url=project.get_property(
                    "install_dependencies_extra_index_url"),
                verbose=project.get_property("verbose"),
                logger=logger,
                force_reinstall=plugin_dependency.url is not None,
                outfile_name=log_file,
                error_file_name=log_file)
            if result:
                log_lines = list(tail(log_file))
                log = log_lines[-1] if not project.get_property(
                    "debug") else "\n".join(log_lines)
                if no_version_installed:
                    raise MissingPluginDependencyException(
                        ",".join(install_targets), log)
                else:
                    logger.error("Failed to install '%s':\n%s",
                                 plugin_dependency, log)
def install_dependency(logger, project, dependency):
    url = getattr(dependency, "url", None)
    logger.info("Installing dependency '%s'%s", dependency.name,
                " from %s" % url if url else "")
    log_file = project.expand_path("$dir_install_logs", dependency.name)
    log_file = re.sub(r'<|>|=', '_', log_file)

    target_dir = None
    try:
        target_dir = project.get_property(
            "install_dependencies_local_mapping")[dependency.name]
    except KeyError:
        pass

    pip_command_line = list()
    pip_command_line.append(PIP_EXECUTABLE)
    pip_command_line.append("install")
    pip_command_line.extend(
        build_pip_install_options(
            project.get_property("install_dependencies_index_url"),
            project.get_property("install_dependencies_extra_index_url"),
            project.get_property("install_dependencies_upgrade"),
            project.get_property("install_dependencies_insecure_installation"),
            True if url else False, target_dir,
            project.get_property("verbose")))
    pip_command_line.extend(as_pip_install_target(dependency))
    logger.debug("Invoking pip: %s", pip_command_line)
    exit_code = execute_command(pip_command_line,
                                log_file,
                                env=os.environ,
                                shell=False)

    if exit_code != 0:
        if project.get_property("verbose"):
            print_file_content(log_file)
            raise BuildFailedException("Unable to install dependency '%s'.",
                                       dependency.name)
        else:
            raise BuildFailedException(
                "Unable to install dependency '%s'. See %s for details.",
                getattr(dependency, "name", dependency), log_file)
def install_dependency(logger, project, dependency):
    url = getattr(dependency, "url", None)
    logger.info("Installing dependency '%s'%s", dependency.name,
                " from {0!s}".format(url) if url else "")
    log_file = project.expand_path("$dir_install_logs", dependency.name)
    log_file = re.sub(r'<|>|=', '_', log_file)

    target_dir = None
    try:
        target_dir = project.get_property("install_dependencies_local_mapping")[dependency.name]
    except KeyError:
        pass

    pip_command_line = list()
    pip_command_line.extend(PIP_EXEC_STANZA)
    pip_command_line.append("install")
    pip_command_line.extend(build_pip_install_options(project.get_property("install_dependencies_index_url"),
                                                      project.get_property("install_dependencies_extra_index_url"),
                                                      project.get_property("install_dependencies_upgrade"),
                                                      project.get_property(
                                                          "install_dependencies_insecure_installation"),
                                                      True if url else False,
                                                      target_dir,
                                                      project.get_property("verbose"),
                                                      project.get_property("install_dependencies_trusted_host")
                                                      ))
    pip_command_line.extend(as_pip_install_target(dependency))
    logger.debug("Invoking pip: %s", pip_command_line)
    exit_code = execute_command(pip_command_line, log_file, env=os.environ, shell=False)

    if exit_code != 0:
        if project.get_property("verbose"):
            print_file_content(log_file)
            raise BuildFailedException("Unable to install dependency '%s'.", dependency.name)
        else:
            raise BuildFailedException("Unable to install dependency '%s'. See %s for details.",
                                       getattr(dependency, "name", dependency),
                                       log_file)
def install_dependencies(logger, project, dependencies, python_env,
                         log_file_name,
                         local_mapping=None,
                         constraints_file_name=None,
                         log_file_mode="ab",
                         package_type="dependency",
                         target_dir=None,
                         ignore_installed=False,
                         ):
    entry_paths = target_dir or python_env.site_paths
    dependencies_to_install, orig_installed_pkgs, dependency_constraints = _filter_dependencies(logger,
                                                                                                project,
                                                                                                dependencies,
                                                                                                entry_paths,
                                                                                                ignore_installed)
    constraints_file = None
    if constraints_file_name:
        constraints_file = np(jp(python_env.env_dir, constraints_file_name))
        create_constraint_file(constraints_file, dependency_constraints)

    if not local_mapping:
        local_mapping = {}

    install_batch = []
    for dependency in dependencies_to_install:
        url = getattr(dependency, "url", None)
        install_options = {}

        if should_update_package(dependency.version) and not getattr(dependency, "version_not_a_spec", False):
            install_options["upgrade"] = True

        if dependency.name in local_mapping or url:
            install_options["force_reinstall"] = bool(url)

        if not target_dir and dependency.name in local_mapping:
            install_options["target_dir"] = local_mapping[dependency.name]

        install_batch.append((as_pip_install_target(dependency), install_options))

        logger.info("Processing %s packages '%s%s'%s to be installed with %s", package_type, dependency.name,
                    dependency.version if dependency.version else "",
                    " from %s" % url if url else "", install_options)

    if install_batch:
        pip_env = {"PIP_NO_INPUT": "1"}

        if project.offline:
            pip_env["PIP_NO_INDEX"] = "1"
            logger.warn("PIP will be operating in the offline mode")

        with open(np(log_file_name), log_file_mode) as log_file:
            results = pip_install_batches(install_batch,
                                          python_env,
                                          index_url=project.get_property("install_dependencies_index_url"),
                                          extra_index_url=project.get_property("install_dependencies_extra_index_url"),
                                          trusted_host=project.get_property("install_dependencies_trusted_host"),
                                          insecure_installs=project.get_property(
                                              "install_dependencies_insecure_installation"),
                                          verbose=project.get_property("pip_verbose"),
                                          constraint_file=constraints_file,
                                          logger=logger,
                                          outfile_name=log_file,
                                          error_file_name=log_file,
                                          target_dir=target_dir,
                                          ignore_installed=ignore_installed)
        for result in results:
            if result:
                raise BuildFailedException("Unable to install %s packages into %s. "
                                           "Please see '%s' for full details:\n%s",
                                           package_type,
                                           python_env.env_dir,
                                           log_file_name,
                                           tail_log(log_file_name))
    return dependencies_to_install
def list_dependencies(project):
    print("\n".join(
        map(lambda d: "{0}".format(" ".join(pip_utils.as_pip_install_target(d))),
            project.build_dependencies + project.dependencies)))