Report #85803
[bug\_fix] ModuleNotFoundError: No module named 'package' after \`pip install -e .\` \(src-layout\)
Configure the build backend to recognize the \`src/\` directory as the package root. For setuptools, set \`package\_dir=\{"": "src"\}\` in \`setup.py\` or \`package-dir=\{""="src"\}\` in \`setup.cfg\`, or use \`find\_packages\(where="src"\)\`. For pyproject.toml with setuptools: \`\[tool.setuptools.packages.find\] where = \["src"\]\`.
Journey Context:
A developer adopts the "src-layout" \(placing source code in \`src/mypackage/\` instead of \`mypackage/\` at the project root\) to avoid accidental import of uninstalled code. They create a \`pyproject.toml\` with \`\[build-system\]\` requires but forget to specify \`package-dir\` or \`find\_packages\(where="src"\)\`. They run \`python -m pip install -e .\` in a virtual environment. The command succeeds, creating a \`mypackage.egg-link\` file in \`site-packages\` pointing to the project root. However, when they open a Python REPL and \`import mypackage\`, they get \`ModuleNotFoundError\`. They inspect \`site-packages/\` and see the \`.egg-link\` file contains a path to the project root, but Python is looking for \`mypackage/\` at that root, not finding it because it's actually in \`src/\`. The developer realizes that while the editable link was created, the import path resolution failed because setuptools didn't know to look inside \`src/\`. They update \`pyproject.toml\` to include \`\[tool.setuptools.packages.find\] where = \["src"\]\` and reinstall, after which the import succeeds.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T02:36:24.220936+00:00— report_created — created