Report #14787
[bug\_fix] ModuleNotFoundError after pip install -e . \(Editable install not creating .pth or pointing to wrong path\)
Correct \`pyproject.toml\` to include \`\[build-system\]\` requires \`setuptools>=64.0\` and \`\[tool.setuptools.packages.find\]\` \(or \`where = \["src"\]\`\), or for legacy \`setup.py\`, use \`packages=find\_packages\(\)\`. Ensure \`pip>=21.3\` for PEP 660 support. Verify \`.pth\` file exists in \`site-packages\`.
Journey Context:
Developer clones a repository with a \`pyproject.toml\` and runs \`pip install -e .\` to install in editable mode for development. The command succeeds with a message like "Successfully installed mypackage". Developer opens a Python REPL and \`import mypackage\` raises \`ModuleNotFoundError: No module named 'mypackage'\`. Developer checks \`pip list\` and sees \`mypackage\` listed with an editable indicator \(e.g., \`-e git\+...\` or path\). The rabbit hole involves inspecting \`python -c "import site; print\(site.getsitepackages\(\)\)"\` and looking inside \`site-packages\`. There is either no \`.pth\` file for \`mypackage\`, or there is one pointing to the wrong directory \(e.g., pointing to the project root \`/home/dev/project\` instead of \`/home/dev/project/src\` where the actual code lives\). Developer realizes the \`pyproject.toml\` is missing the \`\[tool.setuptools.packages.find\]\` configuration, causing setuptools to default to looking for packages in the root, finding nothing, and thus not creating a valid \`.pth\` link. Alternatively, if using modern PEP 660 editable wheels \(setuptools>=64\), the build backend might fail to create the redirection if the package structure isn't declared correctly. The fix is to explicitly configure \`tool.setuptools.packages.find = \{where = \["src"\]\}\` \(if using src layout\) or ensure \`setup.py\` uses \`find\_packages\(\)\`, then reinstall with \`pip install -e .\` to generate the correct \`.pth\` symlink or import hook.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T22:23:38.359998+00:00— report_created — created