Pipenv: Pipenv不再在根目录下工作未作为重大更改列出

创建于 2020-05-28  ·  27评论  ·  资料来源: pypa/pipenv

问题说明

由于在根目录中运行pipenv install时的行为更改,我们的docker构建今天上午失败。
当使用最新版本(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来解决此问题,谢谢大家。

这不是一个有趣的突破性变化,我们所有的docker在构建期间都使用pipenv install:/

遇到相同的问题,使用https://github.com/pypa/pipenv/issues/4273#issuecomment -635303079中的修复为我工作。

由于在根目录中运行pipenv install时的行为更改,我们的docker构建今天上午失败。

您能否在这里解释工作流程-您是否使用--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一起使用的人,通过设置WORKDIR并将其Pipfile / lockfile如下复制来适应Dockerfile可能会有所帮助:

WORKDIR /code
COPY Pipfile Pipfile.lock /code/
RUN pip install pipenv && pipenv install --system
COPY . /code/
  • 建立dockerfile
  • 见下面的代码
  • 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一起使用的人,通过设置WORKDIR并将其Pipfile / lockfile如下复制来适应Dockerfile可能会有所帮助:

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标志将毫无意义- --deploy用于保证您的PipfilePipfile.lock是对齐的,即您的Pipfile.lock是从相应的Pipfile 。 如果您指示要忽略您的pipfile,则永远不会进行此检查。

无论如何, @ killuazhu中包含的日志中的错误都可能与python路径的操作有关,但是如果您可以提出单独的问题,则需要进一步调查

作为参考,当一个人尝试在没有Pipfile的/尝试pipenv install时,就会出现#3434的原始问题。 而在这张票的设置是pipenv install/Pipfile,这以前是在2018年11月26日的工作。 但是,#3386选择了错误的解析方法,该方法完全阻止了从根目录的使用。

感谢您进行修复,您是否有关于何时将新版本pypi软件包中包含此修复程序的ETA?

我们需要确保所有回归问题均已解决,新版本将在下周发布

太棒了,谢谢!

我可以确认版本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:找不到

您能否确认此问题是否有望在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 等级

相关问题

jeyraof picture jeyraof  ·  3评论

jerzyk picture jerzyk  ·  3评论

jakul picture jakul  ·  3评论

randName picture randName  ·  3评论

fbender picture fbender  ·  3评论