{"id":393,"library":"editables","title":"editables","description":"A Python library for creating \"editable wheels\". Current version: 0.5. Supports building wheels that expose packages in a local directory on `sys.path` in \"editable mode\", allowing changes to the package source to be reflected in the package visible to Python without reinstalling. Release cadence: Regular updates with active development.","status":"active","version":"0.5","language":"python","source_language":"en","source_url":"https://github.com/pfmoore/editables","tags":["editable wheels","Python packaging","setuptools","development tools"],"install":[{"cmd":"pip install editables","lang":"bash","label":"Install editables"}],"dependencies":[{"reason":"Required for building and installing packages in editable mode.","package":"setuptools"}],"imports":[{"note":"Ensure correct import path to access EditableWheel class.","symbol":"EditableWheel","correct":"from editables import EditableWheel"}],"quickstart":{"code":"from editables import EditableWheel\n\n# Create an editable wheel for your package\neditable_wheel = EditableWheel('path_to_your_package')\n\n# Build the editable wheel\neditable_wheel.build()\n\n# Install the editable wheel\neditable_wheel.install()","lang":"python","description":"Quickstart guide to create and install an editable wheel using the editables library."},"warnings":[{"fix":"Double-check the path to your package before building the editable wheel.","message":"Ensure that the package path provided to EditableWheel is correct to avoid build errors.","severity":"breaking","affected_versions":"0.5"},{"fix":"Consult the `editables` library's changelog or documentation for the installed version to identify the correct way to access or replace `EditableWheel` functionality. Update your import statements and code to match the new API.","message":"The 'EditableWheel' class cannot be imported directly from the 'editables' package. This indicates an API change where the class might have been removed, moved to a different module, or renamed.","severity":"breaking","affected_versions":">0.5"},{"fix":"Review the installed version of the 'editables' library. If 'editables' version 2.0.0 or higher is installed, the 'EditableWheel' class has been removed. Update your code to use the new API, such as 'EditableProject' or other build functions provided by the 'editables' library, or downgrade 'editables' to a version less than 2.0.0 (e.g., `pip install \"editables<2.0.0\"`).","message":"ImportError: cannot import name 'EditableWheel' from 'editables'. This typically indicates that the installed 'editables' package does not expose 'EditableWheel' at its top level, likely due to an API change where 'EditableWheel' was removed or renamed.","severity":"breaking","affected_versions":"editables>=2.0.0"}],"env_vars":null,"last_verified":"2026-05-12T13:29:39.541Z","next_check":"2026-06-26T00:00:00.000Z","problems":[{"fix":"Install the 'editables' package using pip: `pip install editables` or ensure it's listed in your project's build dependencies (e.g., `build-system.requires` in `pyproject.toml`).","cause":"The 'editables' package, which is often a build dependency for projects using editable installs (PEP 660), is not installed in the active Python environment. This can also appear as 'ModuleNotFoundError: No module named 'editables.redirector''.","error":"ModuleNotFoundError: No module named 'editables'"},{"fix":"Upgrade your build tools, especially `pip` and `setuptools`, to their latest versions: `pip install --upgrade pip setuptools`. Ensure your project's `pyproject.toml` uses a build backend that supports PEP 660 (e.g., modern setuptools or poetry).","cause":"This error occurs when the project's specified build backend (e.g., an older version of setuptools) does not fully support PEP 660 for editable installations via `pyproject.toml`, or the build tools are outdated.","error":"ERROR: Project file:///... has a 'pyproject.toml' and its build backend is missing the 'build_editable' hook. Since it does not have a 'setup.py' nor a 'setup.cfg', it cannot be installed in editable mode. Consider using a build backend that supports PEP 660."},{"fix":"Verify that your package structure is correct (e.g., `src/your_package/__init__.py`), ensure all necessary `__init__.py` files exist to define a Python package, and that your `setup.py` or `pyproject.toml` correctly specifies the package to be installed. Try reactivating your virtual environment or restarting your IDE. If using `pdm`, ensure `editables` is a dependency.","cause":"Even after successfully running `pip install -e .`, the installed package cannot be imported. This can be due to an incorrect project structure, missing `__init__.py` files, an issue with how the `setup.py` or `pyproject.toml` defines the package, or problems with the Python environment not correctly picking up the editable install (e.g., IDEs or virtual environment activation).","error":"ModuleNotFoundError: No module named '<your_package_name>' (after pip install -e .)"},{"fix":"Inspect the full error log for more specific messages that pinpoint the root cause. Ensure all build-time dependencies (specified in `pyproject.toml` or `setup.py`) are installed. You might also try cleaning your build cache (`pip cache purge`) or updating your build backend as described in the previous entry.","cause":"This is a general failure during the editable installation process, often indicating an underlying issue with build dependencies, a misconfigured `setup.py` or `pyproject.toml`, or conflicts within the Python environment that prevent the wheel from being built successfully.","error":"Failed building editable for <your_package_name>\nERROR: Could not build wheels for <your_package_name>, which is required to install pyproject.toml-based projects."}],"ecosystem":"pypi","meta_description":null,"install_score":0,"install_tag":"stale","quickstart_score":0,"quickstart_tag":"stale","pypi_latest":null,"install_checks":{"last_tested":"2026-05-12","tag":"stale","tag_description":"widespread failures or data too old to trust","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null}]},"quickstart_checks":{"last_tested":"2026-04-23","tag":"stale","tag_description":"widespread failures or data too old to trust","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]}}