Pipenv: Pipenv não está mais funcionando no diretório raiz não está listado como uma alteração significativa

Criado em 28 mai. 2020  ·  27Comentários  ·  Fonte: pypa/pipenv

Descrição do problema

Nossas compilações do docker falharam esta manhã devido a uma mudança no comportamento ao executar pipenv install no diretório raiz.
Ao executar com a versão mais recente (2020.5.28), um erro é gerado após as dependências serem construídas e instaladas ERROR: Pipenv is not intended to work under the root directory, please choose another path.
Parece que esta é uma alteração introduzida no # 3386, relacionada a um problema levantado no # 3434.
Esse problema é apenas para apontar que essa mudança de comportamento deve ser listada como falha no changelog, já que atualmente não parece ser mencionada.
Por enquanto, resolvemos isso fixando pipenv na última versão (26/11/2018).

Resultado esperado

N / D

Resultado atual

N / D

Etapas para replicar

N / D

Type Regression

Comentários muito úteis

Posso confirmar que este comportamento não ocorre na versão 2018.11.26 .

@mohamedMok Você pode usar pip install 'pipenv==2018.11.26' que é a última versão que não tem essa alteração significativa.

Todos 27 comentários

oi @ gps035 ,

Estou tendo o mesmo problema com o pipenv.
Você poderia mostrar como fixou a versão pipenv ?

obrigado

Posso confirmar que este comportamento não ocorre na versão 2018.11.26 .

@mohamedMok Você pode usar pip install 'pipenv==2018.11.26' que é a última versão que não tem essa alteração significativa.

@ gps035 Alguma chance de enviar um PR para mencioná-lo no CHANGELOG?

Eu preenchi um PR para resolver esse problema, obrigado a todos.

Não são mudanças interessantes, todos os nossos dockers estão usando pipenv install durante a compilação: /

Tive o mesmo problema, usando a correção em https://github.com/pypa/pipenv/issues/4273#issuecomment -635303079 funcionou para mim.

Nossas compilações do docker falharam esta manhã devido a uma mudança no comportamento ao executar pipenv install no diretório raiz.

você pode explicar o fluxo de trabalho aqui - você está usando --system ?

Como acabei de mencionar em # 4275:

A principal razão para a mudança em primeiro lugar é devido à localização de ambientes virtuais e caminhos de python relacionados - pelo que eu sabia, essa era uma causa substancial de bugs e quebras e basicamente não funcionava. O fato de estar interrompendo fluxos de trabalho é a primeira vez que ouço falar dele funcionando .

Isso não tem a intenção de ser uma alteração importante, mas sim evitar uma interação interrompida anteriormente - para qualquer pessoa para quem isso funcionou, inclua o conjunto completo de argumentos de linha de comando que você estava passando para o pipenv (por exemplo, pipenv install --<whatever> e informações sobre seu fluxo de trabalho:

  • você estava usando o docker? alguma outra infraestrutura de contêiner?
  • qual usuário estava invocando o comando? qual UID (basicamente, era uma conta root)
  • você estava passando --system para o pipenv, criando seu próprio virtualenv ou permitindo que o pipenv criasse um para você?
  • em qual sistema operacional o pipenv estava rodando?
  • Qual versão do python?

Isso é provavelmente o suficiente por agora

@techalchemy Estas são as partes relevantes de nosso Dockerfile que não funcionam mais.

FROM python:3.8

RUN pip install --no-cache-dir pipenv
RUN pipenv install --system --deploy

@techalchemy Obrigado por angariar casos de uso. Aqui está outro exemplo:

  • Cenário de conteinerização: sim, embora não estritamente Docker (imagens OCI)
  • Pipenv é executado no ambiente de construção do contêiner como uid = 0
  • A bandeira --system não está sendo aprovada
  • Linux
  • Python 3.8

Caso seja útil para investigação ou reprodução do problema, as etapas de construção são visíveis neste Make target .

Para quem deseja usar o pipenv mais recente com --system , adaptar seu Dockerfile configurando um WORKDIR e copiando seu Pipfile / lockfile para ele da seguinte maneira pode ser útil:

WORKDIR /code
COPY Pipfile Pipfile.lock /code/
RUN pip install pipenv && pipenv install --system
COPY . /code/
  • construindo dockerfile
  • raiz
  • veja o código abaixo
  • Imagem do docker python:3-slim , vem com Debian GNU/Linux 10
  • 3,8
FROM python:3-slim AS base

ENV PYROOT /pyroot
ENV PYTHONUSERBASE $PYROOT
ENV PATH $PATH:$PYROOT/bin

FROM base AS builder
RUN pip install pipenv
COPY Pipfile* ./
RUN PIP_USER=1 PIP_IGNORE_INSTALLED=1 pipenv install --system --deploy --ignore-pipfile

Para quem deseja usar o pipenv mais recente com --system , adaptar seu Dockerfile configurando um WORKDIR e copiando seu Pipfile / lockfile para ele da seguinte maneira pode ser útil:

WORKDIR /code
COPY Pipfile Pipfile.lock /code/
RUN pip install pipenv && pipenv install --system
COPY . /code/

Isso funcionou para mim. Apenas lembre-se de criar o diretório /code antes.

Isso funcionou para mim. Apenas lembre-se de criar o diretório /code antes.

o comando WORKDIR já cria o diretório se ele não existir

Usar WORKDIR não funcionou para mim. Estou recebendo um erro

Step 9/9 : RUN PIP_USER=1 PIP_IGNORE_INSTALLED=1 pipenv install --system --deploy --ignore-pipfile
 ---> Running in da6fa387210f
Installing dependencies from Pipfile.lock (387af5)…
Failed to load paths: /bin/sh: 1: /root/.local/share/virtualenvs/build-5NmaZ4l5/bin/python: not found

Output: 
Failed to load paths: /bin/sh: 1: /root/.local/share/virtualenvs/build-5NmaZ4l5/bin/python: not found

Output: 
Failed to load paths: /bin/sh: 1: /root/.local/share/virtualenvs/build-5NmaZ4l5/bin/python: not found

Output: 
^Cmake: *** [build-image-base] Interrupt: 2

ao usar dockerfile abaixo

FROM python:3-slim AS base

ENV PYROOT /pyroot
ENV PYTHONUSERBASE $PYROOT
ENV PATH $PATH:$PYROOT/bin

FROM base AS builder
WORKDIR /build
RUN pip install pipenv
COPY Pipfile* /build/
RUN PIP_USER=1 PIP_IGNORE_INSTALLED=1 pipenv install --system --deploy --ignore-pipfile

não parece ser realmente um erro de compilação, consulte # 4220

Como nota extra, $PIP_USER não é definido pelo pipenv e estou relativamente incerto sobre como $PYTHONUSERBASE interage com ele

Além disso, a bandeira --deploy seria um tanto inútil com a bandeira --ignore-pipfile - --deploy é usada para garantir que seu Pipfile e seu Pipfile.lock estão alinhados, isto é, que seu Pipfile.lock foi gerado a partir do Pipfile . Se você indicar que deseja ignorar o pipfile, essa verificação nunca acontecerá.

Em qualquer caso, @killuazhu, o erro nos logs que você incluiu estão possivelmente relacionados às manipulações de seu caminho Python, mas exigirão mais investigação se você puder registrar um problema separado

Para referência, o problema original de # 3434 ocorre quando se tenta pipenv install em / sem um Pipfile. E a configuração neste tíquete é pipenv install em / com um Pipfile, que costumava funcionar em 26/11/2018. No entanto, # 3386 escolheu uma abordagem de resolução errada, que impede o uso do diretório raiz inteiramente.

Obrigado por corrigir. Você tem um ETA de quando a correção será incluída em uma nova versão do pacote pypi?

precisamos garantir que todos os problemas de regressão sejam corrigidos e a nova versão será lançada na próxima semana

Ótimo, obrigado, obrigado!

Posso confirmar que este comportamento não ocorre na versão 2018.11.26 .

@mohamedMok Você pode usar pip install 'pipenv==2018.11.26' que é a última versão que não tem essa alteração significativa.

Eu estava recebendo um erro ligeiramente diferente ao executar python3 -m pipenv install --three --system

Output:
Failed to load paths: /bin/sh: 1: /root/.local/share/virtualenvs/app-4PlAip0Q/bin/python: not found

Fixar a versão antiga também funcionou para mim. Obrigado!

Posso confirmar que este comportamento não ocorre na versão 2018.11.26 .
@mohamedMok Você pode usar pip install 'pipenv==2018.11.26' que é a última versão que não tem essa alteração significativa.

Eu estava recebendo um erro ligeiramente diferente ao executar python3 -m pipenv install --three --system

Output:
Failed to load paths: /bin/sh: 1: /root/.local/share/virtualenvs/app-4PlAip0Q/bin/python: not found

Fixar a versão antiga também funcionou para mim. Obrigado!

Estou tendo o mesmo problema. Agora fixando na versão antiga como uma solução alternativa

precisamos garantir que todos os problemas de regressão sejam corrigidos e a nova versão será lançada na próxima semana

Este problema ainda está presente na versão 2020.6.2:

Resultado:
Falha ao carregar caminhos: / bin / sh: 1: /root/.local/share/virtualenvs/app-lp47FrbD/bin/python: não encontrado

Você poderia confirmar se esse problema deveria ser corrigido na versão 2020.6.2?

Posso confirmar que estou tendo esse problema com o seguinte Dockerfile

FROM python:3.7-slim

ENV LC_ALL C.UTF-8
ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update && \
    apt-get upgrade && \
    apt-get install -y --no-install-recommends libldap2-dev libsasl2-dev libssl-dev && \
    apt-get clean autoclean && rm -rf /var/lib/apt/* /var/cache/apt/* && \
    apt-get autoremove --purge && \
    pip install pipenv --no-cache-dir

WORKDIR /app

COPY Pipfile Pipfile.lock ./
RUN pipenv install --deploy --system --verbose

ENTRYPOINT ["uvicorn", "web.main:app", "--host", "0.0.0.0"]

EXPOSE 8000/tcp

@frostming Você pode, por favor, reabrir o problema?

Também posso confirmar que estou tendo esse problema com o seguinte Dockerfile:

FROM python:3.7.6-slim-stretch
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY .  /app
RUN pip install --upgrade pip
RUN pip install pipenv
RUN pipenv install --system --deploy --ignore-pipfile
CMD ["/bin/bash", "scripts/entrypoint.sh"]

Aqui está o erro:

Step 10/11 : RUN pipenv install --system --deploy --ignore-pipfile
 ---> Running in 00386bcedd89
Installing dependencies from Pipfile.lock (d14b54)…
Failed to load paths: /bin/sh: 1: /root/.local/share/virtualenvs/app-4PlAip0Q/bin/python: not found

Output: 
Failed to load paths: /bin/sh: 1: /root/.local/share/virtualenvs/app-4PlAip0Q/bin/python: not found

Output: 
Failed to load paths: /bin/sh: 1: /root/.local/share/virtualenvs/app-4PlAip0Q/bin/python: not found

Para quem ainda está tendo esse problema, a solução mais fácil é configurar seu Dockerfile como:

FROM python:3.7-slim

# Set environment varibles
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# Set work directory
WORKDIR /code


# Install dependencies
COPY Pipfile Pipfile.lock /code/
RUN pip install pipenv==2018.11.26 && pipenv install --system             # <- this is the fix
...
Esta página foi útil?
0 / 5 - 0 avaliações