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).
N / D
N / D
N / D
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:
--system
para o pipenv, criando seu próprio virtualenv ou permitindo que o pipenv criasse um para você?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:
--system
não está sendo aprovadaCaso 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/
python:3-slim
, vem com Debian GNU/Linux 10
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 usarpip 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
...
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.