Report #79671
[bug\_fix] ModuleNotFoundError: No module named 'mypackage' immediately after \`pip install -e .\` on a project using \`src/\` layout
Add \`package-dir = \{"" = "src"\}\` to \`\[tool.setuptools\]\` in \`pyproject.toml\` \(or \`package\_dir=\{"": "src"\}\` in \`setup.py\`\) and use \`setuptools.packages.find\(where=\["src"\]\)\` to ensure setuptools maps the import name to the \`src/\` directory during editable installs.
Journey Context:
A developer clones a repository structured with source code in \`src/mypackage/\_\_init\_\_.py\` \(the "src layout"\). They create a virtualenv, activate it, and run \`pip install -e .\` from the repo root. The command succeeds and \`pip list\` shows \`mypackage\` with location pointing to the source. However, running \`python -c "import mypackage"\` raises \`ModuleNotFoundError\`. The developer checks \`site-packages\` and sees a \`mypackage.egg-link\` file containing the path to the project root, not the \`src/\` folder. They realize that because the package is under \`src/\`, the import machinery looks for \`mypackage\` at the project root \(where \`.egg-link\` points\) but finds nothing because the code is nested in \`src/\`. They must configure setuptools to treat \`src/\` as the root for package discovery by setting \`package\_dir=\{"": "src"\}\` in \`setup.py\` or the equivalent in \`pyproject.toml\`, then reinstall.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T16:19:35.892565+00:00— report_created — created