Report #70366
[bug\_fix] ModuleNotFoundError after pip install -e . in src-layout
Configure the build backend to recognize the \`src\` directory. For setuptools in \`pyproject.toml\`, add \`\[tool.setuptools.packages.find\]\` with \`where = \["src"\]\`. For \`setup.py\`, add \`package\_dir=\{"": "src"\}\`. Then reinstall with \`pip install -e .\` \(using modern pip/setuptools that supports PEP 660 editable installs\).
Journey Context:
The developer clones a repository using the "src-layout": the package source is in \`repo/src/mypackage/\` rather than \`repo/mypackage/\`. They create a virtual environment, activate it, and run \`pip install -e .\` from the repository root. The command succeeds, showing \`Successfully installed mypackage\`. However, when they run \`python -c "import mypackage"\`, they get \`ModuleNotFoundError: No module named 'mypackage'\`. They verify the venv is active \(\`which python\` points to venv\). They check \`pip list\` and see \`mypackage\` listed. They navigate to \`venv/lib/python3.x/site-packages/\` and find a file named \`\_\_editable\_\_.mypackage.pth\`. Opening it, they see it contains a single line: \`/path/to/repo\`. They realize the \`.pth\` file is adding the repository root to \`sys.path\`, but the actual package is in \`repo/src/\`, not \`repo/\`. Python looks for \`mypackage\` in \`repo/\` but it's actually in \`repo/src/\`. The developer searches for "src-layout setuptools" and finds documentation explaining that \`package\_dir\` must be configured to map the root package namespace to the \`src\` directory. After adding the configuration and reinstalling, the \`.pth\` file now points to \`repo/src\`, and the import succeeds.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T00:41:15.319349+00:00— report_created — created