Report #45325
[bug\_fix] ModuleNotFoundError after \`pip install -e .\` in a src-layout project
Configure the build backend to recognize the src layout. In pyproject.toml with setuptools, add \`\[tool.setuptools.packages.find\]\` with \`where = \["src"\]\`. In setup.py, use \`package\_dir=\{'': 'src'\}\`. Then \`pip uninstall \` and \`pip install -e .\` again so the .pth file or egg-link points to the correct directory containing the importable package.
Journey Context:
Developer clones a project using the 'src' layout \(package code lives in \`src/mypackage/\` rather than \`mypackage/\` at root\). They run \`pip install -e .\` to install in editable mode. When they open Python and \`import mypackage\`, they get ModuleNotFoundError. They check \`pip list\` and see the package is installed, but the import fails. They examine sys.path and realize the egg-link \(older pip\) or the editable wheel path \(newer pip\) is pointing to the project root, but Python doesn't know to look in \`src/\`. The root cause is that setuptools \(or the build backend\) needs to be told about the src layout via \`package\_dir=\{'': 'src'\}\` in setup.py or \`\[tool.setuptools.packages.find\]\` with \`where = \["src"\]\` in pyproject.toml. Without this, the editable install creates a link to the root directory, but the package isn't importable because it's nested. The developer fixes it by configuring the build system correctly, uninstalling, and reinstalling.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T06:33:02.410224+00:00— report_created — created