Report #40223
[bug\_fix] Editable install ImportError: No module named 'src' \(PEP 660 src-layout\)
The root cause is that in a src-layout project \(\`src/mypackage/\`\), the editable install \(PEP 660\) does not automatically know to map the package root to the \`src/\` directory unless explicitly configured. When \`pip install -e .\` is run, setuptools creates a \`.pth\` file pointing to the project root, not \`src/\`, causing imports to fail or look for a literal 'src' package. The fix is to explicitly declare the package directory in \`pyproject.toml\` under \`\[tool.setuptools\]\`: \`package-dir = \{"" = "src"\}\` \(or legacy \`setup.py\`: \`package\_dir=\{"": "src"\}\`\), then reinstall.
Journey Context:
Developer sets up a modern project with \`pyproject.toml\` using setuptools. Directory structure is \`project\_root/src/mypkg/\_\_init\_\_.py\`. They run \`pip install -e .\` from the project root. Installation succeeds. They open a Python shell and \`import mypkg\` works. Later, they add a \`tests/\` folder and try to run tests, getting \`ModuleNotFoundError: No module named 'mypkg'\`. They check \`python -c "import sys; print\(sys.path\)"\` and see the \`.pth\` file in site-packages points to \`/home/user/project\_root\` but the package is in \`project\_root/src\`. They realize setuptools didn't know about the src-layout. They edit \`pyproject.toml\` to add \`\[tool.setuptools\]
package-dir = \{"" = "src"\}\`, run \`pip install -e .\` again, and the \`.pth\` file now correctly points to \`project\_root/src\`, fixing the import.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T21:59:02.845211+00:00— report_created — created