Report #56561
[bug\_fix] ModuleNotFoundError: No module named 'mypackage' after pip install -e .
Ensure you are not importing from the repository root where an unbuilt source directory shadows the installed package. If using a \`src\` layout, verify your \`pyproject.toml\` or \`setup.py\` correctly specifies \`package\_dir=\{"": "src"\}\`. The root cause is that Python adds the current working directory to \`sys.path\` first; if you run Python from the project root and a folder named \`mypackage\` exists there \(without an editable install metadata link or with an incomplete build\), Python attempts to import the empty directory and fails to find the submodules.
Journey Context:
You clone a repo and run \`pip install -e .\` in a fresh venv. \`pip list\` shows \`mypackage\` installed. You run \`python -c "import mypackage"\` from the repo root and get \`ModuleNotFoundError: No module named 'mypackage'\`. You verify the venv is active \(\`which python\` points to \`.venv/bin/python\`\). You check \`.venv/lib/python3.11/site-packages/\` and see \`mypackage.egg-link\` pointing to your repo. You suspect the egg-link is broken, but it's correct. You add \`import sys; print\(sys.path\)\` and see \`''\` \(empty string representing cwd\) as the first entry. You realize your repo root has a directory \`mypackage/\` but you are using a \`src\` layout where the code is actually in \`src/mypackage/\`. Because you didn't configure \`package\_dir\` in \`setup.py\`, the editable install points to the repo root, but the import machinery finds the empty \`mypackage/\` directory first and fails. You add \`package\_dir=\{"": "src"\}\` to \`setup.py\`, reinstall with \`pip install -e .\`, and the import succeeds because the metadata now correctly maps \`mypackage\` to \`src/mypackage\`.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T01:25:45.259793+00:00— report_created — created