Estou trabalhando em um projeto Python com uma compilação Docker de vários estágios e estou tendo um problema em que o pydantic (apenas um exemplo) não está instalado, embora o pip esteja presente e funcionando na imagem final.
Aqui está a estrutura do meu projeto:
project-root/
├── docker-compose.yml
├── vector_db_service/
│ ├── app/
│ │ └── __init__.py
│ ├── Dockerfile
│ ├── pyproject.toml
│ ├── .env
docker-compose.yml:
services:
vector_db_service:
container_name: vector_db_service
build:
context: ./vector_db_service
dockerfile: Dockerfile
command: tail -f /dev/null
env_file:
- ./vector_db_service/.env
Arquivo Docker:
# Build stage
FROM python:3.13-slim AS compile-image
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
RUN pip install --no-cache-dir --upgrade pip
# Final image
FROM python:3.13-slim
COPY --from=compile-image /opt/venv /opt/venv
WORKDIR /app
ENV HOME=/app
ENV PATH="/opt/venv/bin:$PATH"
RUN addgroup --system app && adduser --system --group app
COPY . .
RUN chown -R app:app $HOME
RUN chown -R app:app "/opt/venv/"
USER app
RUN pip install -e pydantic
A última linha, RUN pip install -e pydantic, não instala nada. A compilação é concluída com sucesso, mas o pacote não é instalado. Confirmei que o pip está instalado na imagem final.
Tentei outras variações como RUN pip install pydantic ou RUN pip install -e ., mas elas não alteraram o resultado.
Meu pyproject.toml lista o pydantic como uma dependência. Preciso instalar a partir da raiz do projeto ou estou esquecendo de algo no processo de compilação?
Qualquer ajuda será muito apreciada. Agradeço desde já!
Você deve instalar
pydantic
como uma dependência regular usandopip install
. Como suaspyproject.toml
listaspydantic
são uma dependência, você pode aproveitar isso.Basta usar
pip install pydantic
para buscar e instalar opydantic
pacote do PyPI no ambiente virtual da imagem final.--no-cache-dir
É uma boa prática em Dockerfiles manter o tamanho da imagem reduzido.Na imagem final, esqueci de especificar ENV PATH="/opt/venv/bin:$PATH", embora eu tenha mencionado na pergunta que o adicionei. É por isso que o pip não estava disponível e a instalação não funcionou como esperado. Obrigado a todos pela ajuda e sugestões!
Tente copiar os arquivos do projeto que você precisa
instalar