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.
これは、#3434で発生した問題に関連して、#3386で導入された変更のようです。
この問題は、現在言及されていないように見えるため、この動作の変更は変更ログに壊れているものとしてリストする必要があることを指摘するだけです。
当面は、 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 CHANGELOGにそれを記載するためにPRを送信するチャンスはありますか?

この問題に対処するためにPRを提出しました。皆さんに感謝します。

面白い重大な変更ではありません。すべてのドッカーはビルド中にpipenvインストールを使用しています:/

https://github.com/pypa/pipenv/issues/4273#issuecomment -635303079の修正を使用して、同じ問題が発生しました。

ルートディレクトリでpipenv installを実行したときの動作が変更されたため、今朝、Dockerビルドが失敗しました。

ここでワークフローを説明できますか? --systemますか?

#4275で述べたように:

そもそも変更の主な理由は、仮想環境と関連するPythonパスを見つけることによるものです。私が知る限り、これはバグや破損の実質的な原因であり、基本的には機能しませんでした。 それがワークフローを壊しているという事実は、私がそれがまったく機能聞いた最初のものです

これは重大な変更を意図したものではなく、以前に中断された相互作用を防ぐことを目的としています-これが機能していた人のために、pipenvに渡したコマンドライン引数の完全なセットを含めてください(例: pipenv install --<whatever>およびワークフローに関する情報:

  • Dockerを使用していましたか? 他のコンテナインフラストラクチャ?
  • どのユーザーがコマンドを呼び出していましたか? どのUID(基本的にはrootアカウントでしたか)
  • --systemをpipenvに渡したり、独自のvirtualenvを作成したり、pipenvに仮想環境の作成を許可したりしましたか?
  • pipenvはどのOSで実行されていましたか?
  • どのPythonバージョンですか?

今のところおそらくそれで十分です

@techalchemyこれは、

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

問題の調査または再現に役立つ場合は、ビルド手順がこのMaketargetに表示されます。

--systemで最新のpipenvを使用したい場合は、次のようにWORKDIRを設定し、Pipfile / lockfileをコピーしてDockerfileを調整すると便利です。

WORKDIR /code
COPY Pipfile Pipfile.lock /code/
RUN pip install pipenv && pipenv install --system
COPY . /code/
  • dockerfileの構築
  • ルート
  • 以下のコードを参照してください
  • python:3-slim docker image、 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

--systemで最新のpipenvを使用したい場合は、次のように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は、 PipfilePipfile.lockを保証するために使用されます。 Pipfile.lockは対応するPipfileから生成されています。 pipfileを無視することを指定した場合、このチェックは実行されません。

いずれにせよ、 @ killuazhuに含めたログのエラーは、Pythonパスの操作に関連している可能性がありますが、別の問題を提出できる場合は、さらに調査する必要があります。

参考までに、#3434の元の問題は、Pipfileなし/下でpipenv installしようとしたときに発生します。 そして、このチケットでのセットアップはにあるpipenv installの下に/ 2018年11月26日に作業をすることに使用されるPipfile、。 ただし、#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 評価