prefix_data#

Tools for managing the packages installed within an environment.

Classes#

PrefixDataType

Basic caching of PrefixData instance objects.

PrefixData

The PrefixData class aims to be the representation of the state

Functions#

get_conda_anchor_files_and_records(...)

Return the anchor files for the conda records of python packages.

python_record_for_prefix(...)

For the given conda prefix, return the PrefixRecord of the Python installed

get_python_version_for_prefix(→ str | None)

For the given conda prefix, return the version of the Python installation

delete_prefix_from_linked_data(→ bool)

Here, path may be a complete prefix or a dist inside a prefix

Attributes#

T

T#
class PrefixDataType#

Bases: type

Basic caching of PrefixData instance objects.

__call__(prefix_path: str | os.PathLike | pathlib.Path, interoperability: bool | None = None) PrefixData#

Call self as a function.

class PrefixData(prefix_path: str | os.PathLike[str] | pathlib.Path, interoperability: bool | None = None)#

The PrefixData class aims to be the representation of the state of a conda environment on disk. The directory where the environment lives is called prefix.

This class supports different types of tasks:

  • Reading and querying conda-meta/*.json files as PrefixRecord objects

  • Reading and writing environment-specific configuration (env vars, state file, nonadmin markers, etc)

  • Existence checks and validations of name, path, and magic files / markers

  • Exposing non-conda packages installed in prefix as PrefixRecord, via the plugin system

property name: str#

Returns the name of the environment, if available.

If the environment doesn't live in one the configured envs_dirs, an empty string is returned. The construct prefix_data.name or prefix_data.prefix_path can be helpful in those cases.

property is_writable: bool | None | conda.auxlib._Null#

Check whether the configured path is writable. This is assessed by checking whether conda-meta/history is writable. It if is, it is assumed that the rest of the directory tree is writable too.

Note: The value is cached in the instance. Use .assert_writable() for a non- cached check.

property _pip_interop_enabled#
property _prefix_records: dict[str, conda.models.records.PrefixRecord] | None#
property _python_pkg_record: conda.models.records.PrefixRecord | None#

Return the prefix record for the package python.

_cache_: dict[tuple[pathlib.Path, bool | None], PrefixData]#
classmethod from_name(name: str, **kwargs) PrefixData#

Creates a PrefixData instance from an environment name.

The name will be validated with PrefixData.validate_name() if it does not exist.

Parameters:

name -- The name of the environment. Must not contain path separators (/, ).

Raises:

CondaValueError -- If name contains a path separator.

classmethod from_context(validate: bool = False) PrefixData#

Creates a PrefixData instance from the path specified by context.target_prefix.

The path and name will be validated with PrefixData.validate_path() and PrefixData.validate_name(), respectively, if validate is True.

Parameters:

validate -- Whether the path and name should be validated. Useful for environments about to be created.

__eq__(other: Any) bool#

Return self==value.

exists() bool#

Check whether the PrefixData path exists and is a directory.

is_environment() bool#

Check whether the PrefixData path is a valida conda environment.

This is assessed by checking if conda-meta/history marker file exists.

is_frozen() bool#

Check whether the environment is marked as frozen, as per CEP 22.

This is assessed by checking if conda-meta/frozen marker file exists.

is_base() bool#

Check whether the configured path refers to the base environment.

assert_exists() None#

Check whether the environment path exists.

Raises:

EnvironmentLocationNotFound -- If the check returns False.

assert_environment() None#

Check whether the environment path exists and is a valid conda environment.

Raises:

DirectoryNotACondaEnvironmentError -- If the check returns False.

assert_writable() None#

Check whether the environment path is a valid conda environment and is writable.

Raises:

EnvironmentNotWritableError -- If the check returns False.

assert_not_frozen() None#

Check whether the environment path is a valid conda environment and is not marked as frozen (as per CEP 22).

Raises:

EnvironmentIsFrozenError -- If the environment is marked as frozen.

validate_path(expand_path: bool = False) None#

Validate the path of the environment.

It runs the following checks:

  • Make sure the path does not contain : or ; (OS-dependent).

  • Disallow immediately nested environments (e.g. $CONDA_ROOT and $CONDA_ROOT/my-env).

  • Warn if there are spaces in the path.

Parameters:

expand_path -- Whether to process ~ and environment variables in the string. The expanded value will replace .prefix_path.

Raises:

CondaValueError -- If the environment contains :, ;, or is nested.

validate_name(allow_base: bool = False) None#

Validate the name of the environment.

Parameters:

allow_base -- Whether to allow base as a valid name.

Raises:

CondaValueError -- If the name is protected, or if it contains disallowed characters (/, ` , `:, #).

load() None#
reload() PrefixData#
_get_json_fn(prefix_record: conda.models.records.PrefixRecord) str#
insert(prefix_record: conda.models.records.PrefixRecord, remove_auth: bool = True) None#
remove(package_name: str) None#
get(package_name: str, default: T = NULL) conda.models.records.PackageRecord | T#
iter_records() collections.abc.Iterable[conda.models.records.PrefixRecord]#
iter_records_sorted() collections.abc.Iterable[conda.models.records.PrefixRecord]#
all_subdir_urls() set[str]#
query(package_ref_or_match_spec: conda.models.records.PackageRecord | conda.models.match_spec.MatchSpec | str) collections.abc.Iterable[conda.models.records.PrefixRecord]#
_load_single_record(prefix_record_json_path: conda.common.path.PathType) None#
_load_site_packages() dict[str, conda.models.records.PrefixRecord]#
_get_environment_state_file() dict[str, dict[str, str]]#
_write_environment_state_file(state: dict[str, dict[str, str]]) None#
get_environment_env_vars() dict[str, str] | dict[bytes, bytes]#
set_environment_env_vars(env_vars: dict[str, str]) dict[str, str] | None#
unset_environment_env_vars(env_vars: dict[str, str]) dict[str, str] | None#
set_nonadmin() None#

Creates $PREFIX/.nonadmin if sys.prefix/.nonadmin exists (on Windows).

get_conda_anchor_files_and_records(site_packages_short_path: conda.common.path.PathType, python_records: collections.abc.Iterable[conda.models.records.PrefixRecord]) dict[conda.common.path.PathType, conda.models.records.PrefixRecord]#

Return the anchor files for the conda records of python packages.

python_record_for_prefix(prefix: os.PathLike) conda.models.records.PrefixRecord | None#

For the given conda prefix, return the PrefixRecord of the Python installed in that prefix.

get_python_version_for_prefix(prefix: os.PathLike) str | None#

For the given conda prefix, return the version of the Python installation in that prefix.

delete_prefix_from_linked_data(path: str | os.PathLike | pathlib.Path) bool#

Here, path may be a complete prefix or a dist inside a prefix