Report #46198
[bug\_fix] ModuleNotFoundError inside Docker container despite 'pip install -e .' succeeding during build
Avoid using editable installs \(\`pip install -e .\`\) in Docker images; instead use \`pip install .\` \(non-editable\) which copies package files into \`site-packages\`. If you must use editable mode for development, ensure the absolute paths in the \`.pth\` files generated during build exactly match the container's filesystem layout, or mount the code at that specific path. The root cause is that editable installs create \`.pth\` files containing absolute filesystem paths from the build environment; inside a container, these paths often point to locations that don't exist or differ from the build context.
Journey Context:
You have a Python project with a \`pyproject.toml\`. Your Dockerfile contains: \`COPY . /app\`, \`WORKDIR /app\`, \`RUN pip install -e .\`. The build completes successfully and \`pip list\` shows your package. When you run the container with \`docker run myimage python -c "import mypackage"\`, you get \`ModuleNotFoundError\`. You enter the container with \`docker run -it myimage bash\` and check \`ls /app\` - the code is there. You check \`pip show mypackage\` and see the Location is \`/usr/local/lib/python3.11/site-packages\`. You look in that directory and find a file named \`\_\_editable\_\_.\*.pth\` or \`mypackage.pth\`. You \`cat\` it and see it contains \`/app\` or perhaps \`/home/user/project\` from your local machine's build context. If you built on a different machine, the path is wrong. If the container's code is at \`/app\` but the \`.pth\` points to \`/home/user/myapp\` \(from a local build with BuildKit\), it fails. You realize editable installs are not portable. You modify the Dockerfile to use \`RUN pip install .\` instead, which copies the files into \`site-packages\` and doesn't rely on external paths.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T08:01:06.886738+00:00— report_created — created