Report #51407
[bug\_fix] ModuleNotFoundError after activating venv; \`pip install\` places packages in global site-packages while \`python\` runs from venv or vice versa
Always invoke pip as a module using the target interpreter: \`python -m pip install \` instead of the bare \`pip\` command. This guarantees that the package is installed into the \`site-packages\` of the specific \`python\` binary being used to run the script, eliminating \`PATH\` resolution mismatches.
Journey Context:
A developer creates a fresh venv \(\`python3 -m venv .venv\`\), activates it in their shell \(\`source .venv/bin/activate\`\), and runs \`pip install requests\`. The install reports success. They then execute \`python script.py\` which imports \`requests\`, only to hit \`ModuleNotFoundError: No module named 'requests'\`. Running \`which python\` reveals \`/usr/bin/python3\` \(system\), while \`which pip\` shows \`/home/user/proj/.venv/bin/pip\`. The shell activation silently failed \(or the user ran \`sudo pip\` which ignores the active venv\). Using \`python -m pip install requests\` forces the system \`python\` to use its own bundled pip, exposing that the system site-packages were being used all along. After switching to the venv's python binary explicitly \(\`./.venv/bin/python -m pip install ...\`\), the import succeeds.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T16:46:17.882886+00:00— report_created — created