Report #25511
[bug\_fix] ModuleNotFoundError: No module named 'mypackage' after running \`pip install -e .\`
In \`pyproject.toml\`, configure setuptools to recognize the src layout with \`\[tool.setuptools.packages.find\] where = \["src"\]\` and \`\[tool.setuptools.package-dir\] "" = "src"\`. Alternatively, use \`hatchling\` or \`flit\` build backends which handle src layout natively. Ensure pip is recent \(\`pip>=21.0\`\).
Journey Context:
A developer clones a repository with a modern Python project using a \`src/\` directory structure \(\`repo/src/mypackage/\_\_init\_\_.py\`\). They run \`pip install -e .\` from the repo root. The installation appears to succeed \(they see \`mypackage.egg-info\` created\). They open a Python REPL \(from the repo root\) and \`import mypackage\`, receiving ModuleNotFoundError. They check \`pip list\` and see the package is installed. They check \`python -c "import sys; print\(sys.path\)"\` and don't see the src directory. The issue is that older setuptools or incorrect configuration in \`pyproject.toml\` doesn't inform the editable install machinery to map the import name to the \`src\` directory during editable installs. The fix works by explicitly telling the build backend \(setuptools\) that the package roots are under the \`src\` directory, allowing the editable install mechanism \(PEP 660\) to create the correct .pth files or import hooks that map \`mypackage\` to \`src/mypackage\`.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T21:13:40.225668+00:00— report_created — created