solve#

经典的求解器实现。

#

Solver

conda 求解逻辑的高级 API。提供了三种公共方法来访问

SolverStateContainer

函数#

get_pinned_specs(prefix)

从文件中查找固定的规范,并返回 MatchSpec 元组。

diff_for_unlink_link_precs([force_reinstall])

class Solver(prefix: str, channels: collections.abc.Iterable[conda.models.channel.Channel], subdirs: collections.abc.Iterable[str] = (), specs_to_add: collections.abc.Iterable[conda.models.match_spec.MatchSpec] = (), specs_to_remove: collections.abc.Iterable[conda.models.match_spec.MatchSpec] = (), repodata_fn: str = REPODATA_FN, command=NULL)#

conda 求解逻辑的高级 API。提供了三种公共方法来访问各种形式的解决方案。

参数:
  • prefix (str) -- Solver 被实例化的 conda 前缀/环境位置。

  • channels (Sequence[Channel]) -- 用于解决方案的优先级频道列表。

  • subdirs (Sequence[str]) -- 用于解决方案的优先级子目录列表。

  • specs_to_add (set[MatchSpec]) -- 要添加到前缀的包规范集。

  • specs_to_remove (set[MatchSpec]) -- 要从前缀中删除的包规范集。

solve_for_transaction(update_modifier=NULL, deps_modifier=NULL, prune=NULL, ignore_pinned=NULL, force_remove=NULL, force_reinstall=NULL, should_retry_solve=False)#

提供一个 UnlinkLinkTransaction 实例,该实例可用于在环境上执行解决方案。

参数:
返回类型:

UnlinkLinkTransaction

solve_for_diff(update_modifier=NULL, deps_modifier=NULL, prune=NULL, ignore_pinned=NULL, force_remove=NULL, force_reinstall=NULL, should_retry_solve=False) tuple[tuple[conda.models.records.PackageRecord, Ellipsis], tuple[conda.models.records.PackageRecord, Ellipsis]]#

提供要从环境中删除的包引用,然后是要添加到环境中的包引用。

参数:
返回:

PackageRef 序列的二元组。第一个是要从环境中删除的包组,按排序的依赖顺序从叶到根。第二个是要添加到环境中的包组,按排序的依赖顺序从根到叶。

返回类型:

tuple[PackageRef], tuple[PackageRef]

solve_final_state(update_modifier=NULL, deps_modifier=NULL, prune=NULL, ignore_pinned=NULL, force_remove=NULL, should_retry_solve=False)#

给出环境的最终、已求解状态。

参数:
  • update_modifier (UpdateModifier) -- 一个可选标志,指示如何处理关于环境中已存在的包的更新。

  • deps_modifier (DepsModifier) -- 一个可选标志,指示依赖项的特殊求解器处理。默认的求解器行为是在依赖项更新方面尽可能保守(在依赖项已存在于环境中的情况下),同时仍确保满足所有依赖项。选项包括 * NO_DEPS * ONLY_DEPS * UPDATE_DEPS * UPDATE_DEPS_ONLY_DEPS * FREEZE_INSTALLED

  • prune (bool) -- 如果 True,则解决方案将不包含先前作为依赖项引入环境但不再作为依赖项需要且不是用户请求的包。

  • ignore_pinned (bool) -- 如果 True,则解决方案将忽略前缀的固定包配置。

  • force_remove (bool) -- 强制删除包,而不删除依赖于它的包。

  • should_retry_solve (bool) -- 指示是否将重试此求解。这允许我们控制是否在 ssc.r.solve 中调用 find_conflicts(慢)。

返回:

按排序的依赖顺序从根到叶,环境的已求解状态的包引用。

返回类型:

tuple[PackageRef]

determine_constricting_specs(spec, solution_precs)#
get_request_package_in_solution(solution_precs, specs_map)#
get_constrained_packages(pre_packages, post_packages, index_keys)#
_collect_all_metadata(ssc)#
_remove_specs(ssc)#
_find_inconsistent_packages(ssc)#
_package_has_updates(ssc, spec, installed_pool)#
_should_freeze(ssc, target_prec, conflict_specs, explicit_pool, installed_pool)#
_add_specs(ssc)#
_run_sat(ssc)#
_post_sat_handling(ssc)#
_notify_conda_outdated(link_precs)#
_prepare(prepared_specs)#
class SolverStateContainer(prefix, update_modifier, deps_modifier, prune, ignore_pinned, force_remove, should_retry_solve)#
prefix_data()#
specs_from_history_map()#
track_features_specs()#
pinned_specs()#
set_repository_metadata(index, r)#
_init_solution_precs()#
working_state_reset()#
get_pinned_specs(prefix)#

从文件中查找固定的规范,并返回 MatchSpec 元组。