Install & Compatibility
Where this runs
tested against v1.13.0 · pip install
no network on importno background threads
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
muslpy 3.10–3.910 runs
installs and imports cleanly · install 0.0s · import 0.000s · 95.1MB
glibcpy 3.10–3.910 runs
installs and imports cleanly · install 3.0s · import 0.000s · 91MB
70MB installed
● package 70MB
Code
Verified usage
Verified import paths — ran on the pinned version, not inferred.
etils
✓ import etils
✗ import etils.epath
This example demonstrates the usage of `epath` for basic file operations. `epath.Path` extends `pathlib.Path` to seamlessly handle both local and cloud-based file paths (e.g., `gs://`, `s3://`) by integrating with respective cloud storage libraries.
from etils import epath
# epath provides a pathlib-like API with cloud storage support (gs://, s3://)
# For local paths, it behaves like pathlib.Path
local_path = epath.Path("/tmp/etils_example.txt")
local_path.write_text("Hello from etils epath!")
print(f"File created at: {local_path}")
print(f"Content: {local_path.read_text()}")
# Clean up (optional)
local_path.unlink()
Debug
Known issues
gotchaEtils is designed with independent submodules; importing `etils` directly does not expose all functionalities. Users must explicitly `from etils import <submodule>` (e.g., `from etils import epath`) to access specific utilities.fixAlways use `from etils import <submodule>` for required functionality. Do not expect `import etils` to make all sub-utilities available.
affects: All versions
breakingMany features are behind optional dependencies (extras). Installing only `pip install etils` will lead to `ModuleNotFoundError` if you attempt to use functionality from submodules like `epath` or `ejax` without installing `pip install etils[epath]` or similar.fixInstall `etils` with the specific extras corresponding to the submodules you intend to use, e.g., `pip install etils[epath,epy]`.
affects: All versions
gotchaThe return value format of `epath.Path.stat()` might not strictly match `pathlib.Path.stat()`. This can cause subtle incompatibilities or `AttributeError` if code expects specific attributes only present in `pathlib`'s `stat` result.fixCarefully review the documentation for `epath.Path.stat()` and adapt code to its specific return structure, or use only commonly available attributes for maximum compatibility.
affects: All versions
deprecatedPrevious versions may have included or exposed certain utilities (e.g., `epy.cached_property`) that have since been removed or relocated, leading to `AttributeError` on upgrade.fixConsult the `etils` release notes or GitHub issues for migration guides. For `epy.cached_property`, consider using standard library `functools.cached_property` if applicable to your Python version.
affects: <=1.13.0 (potentially)
gotchaThere's an open issue (#756) regarding `eapp.better_logging()` potentially causing double logging output. This can lead to redundant or confusing log messages in applications using `eapp`.fixMonitor GitHub issues for a resolution. As a workaround, inspect your logging configuration to prevent duplicate handlers or adjust `eapp.better_logging()` parameters if available.
affects: All versions
Upgrade
Version history
1.14.0latest on PyPI · released Mar 4, 2026
Audit
Dependencies
array_typesoptionalFor typing annotations for JAX and NumPy arrays
epathoptionalFor pathlib-like API with cloud storage support (gs://, s3://)
epyoptionalFor general-purpose Python utilities
etreeoptionalFor universal tree manipulation utilities (TensorFlow, JAX, DeepMind tree)
enpoptionalFor NumPy utilities
ecolaboptionalFor Colab/Jupyter utilities
edcoptionalFor dataclass utilities
eappoptionalFor Absl flags/app utilities