Сегодня утром наши сборки докеров потерпели неудачу из-за изменения поведения при запуске 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).
Нет данных
Нет данных
Нет данных
привет @ 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>
и информация о вашем рабочем процессе:
--system
в pipenv, создавали свой собственный virtualenv или позволяли pipenv создать его для вас?На данный момент этого, наверное, достаточно
@techalchemy Это соответствующие части нашего Dockerfile, которые больше не работают.
FROM python:3.8
RUN pip install --no-cache-dir pipenv
RUN pipenv install --system --deploy
@techalchemy Спасибо за
--system
не передаетсяЕсли это полезно для исследования или воспроизведения проблемы, шаги сборки видны в этой цели 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
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
...
Самый полезный комментарий
Я могу подтвердить, что такого поведения не наблюдается в версии
2018.11.26
.@mohamedMok Вы можете использовать
pip install 'pipenv==2018.11.26'
последнюю версию, в которой нет этого критического изменения.