Pipenv: Pipenv, больше не работающий в корневом каталоге, не указан как критическое изменение

Созданный на 28 мая 2020  ·  27Комментарии  ·  Источник: pypa/pipenv

Описание проблемы

Сегодня утром наши сборки докеров потерпели неудачу из-за изменения поведения при запуске pipenv install в корневом каталоге.
При работе с последней версией (2020.5.28) выдается ошибка после сборки и установки зависимостей ERROR: Pipenv is not intended to work under the root directory, please choose another path.
Похоже, это изменение, внесенное в # 3386, связано с проблемой, поднятой в # 3434.
Эта проблема на самом деле просто указывает на то, что это изменение поведения должно быть указано как нарушение в журнале изменений, поскольку в настоящее время оно не упоминается.
В настоящее время мы работали над этим, закрепив pipenv в последней версии (2018.11.26).

Ожидаемый результат

Нет данных

Фактический результат

Нет данных

Шаги по воспроизведению

Нет данных

Type Regression

Самый полезный комментарий

Я могу подтвердить, что такого поведения не наблюдается в версии 2018.11.26 .

@mohamedMok Вы можете использовать pip install 'pipenv==2018.11.26' последнюю версию, в которой нет этого критического изменения.

Все 27 Комментарий

привет @ gps035 ,

У меня такая же проблема с pipenv.
Не могли бы вы показать, как вы закрепили версию pipenv ?

благодаря

Я могу подтвердить, что такого поведения не наблюдается в версии 2018.11.26 .

@mohamedMok Вы можете использовать pip install 'pipenv==2018.11.26' последнюю версию, в которой нет этого критического изменения.

@ gps035 Есть ли шанс отправить PR, чтобы упомянуть об этом в CHANGELOG?

Я написал PR для решения этой проблемы, спасибо всем.

Не очень забавные критические изменения, все наши докеры используют установку pipenv во время сборки: /

Возникла та же проблема, у меня сработало исправление в https://github.com/pypa/pipenv/issues/4273#issuecomment -635303079.

Сегодня утром наши сборки докеров потерпели неудачу из-за изменения поведения при запуске pipenv install в корневом каталоге.

можете ли вы объяснить здесь рабочий процесс - вы используете --system ?

Как я только что упомянул в # 4275:

Основная причина изменения в первую очередь связана с обнаружением виртуальных сред и связанных путей Python - насколько мне известно, это было существенной причиной ошибок и поломок и в основном не работало. Тот факт, что он нарушает рабочий процесс, - это первое, что я слышу о его работе .

Это не является критическим изменением, оно предназначено для предотвращения ранее нарушенного взаимодействия - для всех, для кого это работало, включите полный набор аргументов командной строки, которые вы передавали в pipenv (например, pipenv install --<whatever> и информация о вашем рабочем процессе:

  • вы использовали докер? какая-то другая контейнерная инфраструктура?
  • какой пользователь запускал команду? какой UID (в основном, это была учетная запись root)
  • Вы передавали --system в pipenv, создавали свой собственный virtualenv или позволяли pipenv создать его для вас?
  • под какой ОС работал pipenv?
  • Какая версия Python?

На данный момент этого, наверное, достаточно

@techalchemy Это соответствующие части нашего Dockerfile, которые больше не работают.

FROM python:3.8

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

@techalchemy Спасибо за

  • Сценарий контейнеризации: да, но не строго Docker (образы OCI)
  • Pipenv работает в среде сборки контейнера как uid = 0
  • Флаг --system не передается
  • Linux
  • Python 3.8

Если это полезно для исследования или воспроизведения проблемы, шаги сборки видны в этой цели Make .

Для тех, кто хочет использовать последнюю версию pipenv с --system , может быть полезна адаптация вашего Dockerfile, установив WORKDIR и скопировав в него Pipfile / lockfile следующим образом:

WORKDIR /code
COPY Pipfile Pipfile.lock /code/
RUN pip install pipenv && pipenv install --system
COPY . /code/
  • создание файла докеров
  • корень
  • см. код ниже
  • python:3-slim образ докера, идет с 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

Для тех, кто хочет использовать последнюю версию pipenv с --system , может быть полезна адаптация вашего Dockerfile, установив WORKDIR и скопировав в него Pipfile / lockfile следующим образом:

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

Это сработало для меня. Просто не забудьте перед этим создать каталог /code .

Это сработало для меня. Просто не забудьте перед этим создать каталог /code .

команда WORKDIR уже создает каталог, если он не существует

Использование WORKDIR не помогло мне. Я получаю ошибку

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

при использовании dockerfile ниже

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

На самом деле это не похоже на ошибку сборки, см. # 4220

В качестве примечания, $PIP_USER сбрасывается из-за pipenv, и я относительно не уверен, как $PYTHONUSERBASE взаимодействует с ним.

Кроме того, флаг --deploy был бы несколько бессмысленным с флагом --ignore-pipfile - --deploy используется для гарантии того, что ваши Pipfile и ваши Pipfile.lock выровнены, т.е. ваш Pipfile.lock был сгенерирован из соответствующего Pipfile . Если вы укажете, что хотите игнорировать свой pip-файл, эта проверка никогда не произойдет.

В любом случае @killuazhu ошибка в журналах, которые вы включили, возможно, связана с манипуляциями с вашим путем python, но потребует дальнейшего расследования, если вы можете подать отдельную проблему

Для справки: исходная проблема # 3434 возникает, когда кто-то пытается pipenv install под / без Pipfile. И установка в этом билете - pipenv install под / с помощью Pipfile, который раньше работал в 2018.11.26. Однако # 3386 выбрал неправильный подход к разрешению, что полностью исключает использование корневого каталога.

Спасибо за исправление, есть ли у вас ETA, когда исправление будет включено в новую версию пакета pypi?

нам нужно убедиться, что все проблемы с регрессией исправлены, и новый выпуск выйдет на следующей неделе

Огромное спасибо, ценю!

Я могу подтвердить, что такого поведения не наблюдается в версии 2018.11.26 .

@mohamedMok Вы можете использовать pip install 'pipenv==2018.11.26' последнюю версию, в которой нет этого критического изменения.

Я получал немного другую ошибку при запуске python3 -m pipenv install --three --system

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

Прикрепление к старой версии у меня тоже сработало. Благодаря!

Я могу подтвердить, что такого поведения не наблюдается в версии 2018.11.26 .
@mohamedMok Вы можете использовать pip install 'pipenv==2018.11.26' последнюю версию, в которой нет этого критического изменения.

Я получал немного другую ошибку при запуске python3 -m pipenv install --three --system

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

Прикрепление к старой версии у меня тоже сработало. Благодаря!

У меня такая же проблема. Теперь закрепляем старую версию в качестве временного решения

нам нужно убедиться, что все проблемы с регрессией исправлены, и новый выпуск выйдет на следующей неделе

Эта проблема все еще присутствует в версии 2020.6.2:

Вывод:
Не удалось загрузить пути: / bin / sh: 1: /root/.local/share/virtualenvs/app-lp47FrbD/bin/python: not found

Не могли бы вы подтвердить, ожидается ли, что эта проблема будет исправлена ​​в выпуске 2020.6.2?

Я могу подтвердить, что сталкиваюсь с этой проблемой со следующей 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 Не могли бы вы снова открыть проблему?

Я также могу подтвердить, что сталкиваюсь с этой проблемой со следующим 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"]

Вот ошибка:

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

Для людей, которые все еще сталкиваются с этой проблемой, самое простое решение - настроить Dockerfile следующим образом:

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
...
Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

bgjelstrup picture bgjelstrup  ·  3Комментарии

jeyraof picture jeyraof  ·  3Комментарии

jacebrowning picture jacebrowning  ·  3Комментарии

jakul picture jakul  ·  3Комментарии

konstin picture konstin  ·  3Комментарии