Pipenv: Pipenv tidak lagi berfungsi di bawah direktori root tidak terdaftar sebagai perubahan yang dapat menyebabkan gangguan

Dibuat pada 28 Mei 2020  ·  27Komentar  ·  Sumber: pypa/pipenv

Deskripsi masalah

Build buruh pelabuhan kami gagal pagi ini karena perubahan perilaku saat menjalankan pipenv install di direktori root.
Saat menjalankan dengan versi terbaru (2020.5.28) kesalahan muncul setelah dependensi dibuat dan diinstal ERROR: Pipenv is not intended to work under the root directory, please choose another path.
Sepertinya ini adalah perubahan yang diperkenalkan di # 3386, terkait dengan masalah yang diangkat di # 3434.
Masalah ini sebenarnya hanya untuk menunjukkan bahwa perubahan perilaku ini harus dicantumkan sebagai melanggar di changelog, karena saat ini tampaknya tidak disebutkan.
Untuk saat ini kami telah mengatasi ini dengan menyematkan pipenv ke versi terakhir (2018.11.26).

Hasil yang diharapkan

T / A

Hasil sebenarnya

T / A

Langkah-langkah untuk mereplikasi

T / A

Type Regression

Komentar yang paling membantu

Saya dapat memastikan bahwa perilaku ini tidak terjadi pada versi 2018.11.26 .

@mohamedMok Anda dapat menggunakan pip install 'pipenv==2018.11.26' yang merupakan versi terakhir yang tidak memiliki perubahan yang mengganggu ini.

Semua 27 komentar

hai @ gps035 ,

Saya mengalami masalah yang sama dengan pipenv.
Bisakah Anda menunjukkan bagaimana Anda memasang pin pada versi pipenv ?

Terima kasih

Saya dapat memastikan bahwa perilaku ini tidak terjadi pada versi 2018.11.26 .

@mohamedMok Anda dapat menggunakan pip install 'pipenv==2018.11.26' yang merupakan versi terakhir yang tidak memiliki perubahan yang mengganggu ini.

@ gps035 Adakah kesempatan mengirim PR untuk menyebutkannya di CHANGELOG?

Saya telah mengajukan PR untuk mengatasi masalah ini, terima kasih untuk semuanya.

Bukan perubahan yang lucu, semua buruh pelabuhan kami menggunakan pemasangan pipenv selama pembuatan: /

Mengalami masalah yang sama, menggunakan perbaikan di https://github.com/pypa/pipenv/issues/4273#issuecomment -635303079 berhasil untuk saya.

Build buruh pelabuhan kami gagal pagi ini karena perubahan perilaku saat menjalankan pipenv install di direktori root.

dapatkah Anda menjelaskan alur kerjanya di sini - apakah Anda menggunakan --system ?

Seperti yang baru saya sebutkan di # 4275:

Alasan utama untuk perubahan di tempat pertama adalah karena lokasi lingkungan virtual & jalur python terkait - sejauh yang saya ketahui, ini adalah penyebab utama dari bug dan kerusakan dan pada dasarnya tidak berfungsi. Fakta bahwa itu merusak alur kerja adalah yang pertama saya dengar itu berfungsi sama sekali.

Ini tidak dimaksudkan sebagai perubahan yang mengganggu, ini dimaksudkan untuk mencegah interaksi terputus sebelumnya - untuk siapa saja yang telah bekerja, harap sertakan set lengkap argumen baris perintah yang Anda berikan ke pipenv (mis. pipenv install --<whatever> dan informasi tentang alur kerja Anda:

  • apakah kamu menggunakan buruh pelabuhan? beberapa infrastruktur kontainer lainnya?
  • pengguna apa yang menjalankan perintah? apa UID (pada dasarnya, apakah itu akun root)
  • apakah Anda mengirimkan --system ke pipenv, membuat virtualenv Anda sendiri, atau mengizinkan pipenv membuatkannya untuk Anda?
  • OS apa yang menjalankan pipenv?
  • Versi python apa?

Itu mungkin cukup untuk saat ini

@techalchemy Ini adalah bagian relevan dari Dockerfile kami yang tidak lagi berfungsi.

FROM python:3.8

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

@techalchemy Terima kasih telah menyelidiki kasus penggunaan. Berikut contoh lainnya:

  • Skenario kontainerisasi: ya, meskipun tidak hanya Docker (gambar OCI)
  • Pipenv berjalan dalam lingkungan build container sebagai uid = 0
  • Bendera --system tidak dikirimkan
  • Linux
  • Python 3.8

Jika berguna untuk menyelidiki atau mereproduksi masalah, langkah-langkah build dapat dilihat dalam Buat target ini .

Bagi siapa saja yang ingin menggunakan pipenv terbaru dengan --system , mengadaptasi Dockerfile Anda dengan menyetel WORKDIR dan menyalin Pipfile / lockfile Anda ke dalamnya sebagai berikut mungkin bisa membantu:

WORKDIR /code
COPY Pipfile Pipfile.lock /code/
RUN pip install pipenv && pipenv install --system
COPY . /code/
  • membangun dockerfile
  • akar
  • lihat kode di bawah ini
  • python:3-slim gambar buruh pelabuhan, dilengkapi dengan 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

Bagi siapa saja yang ingin menggunakan pipenv terbaru dengan --system , mengadaptasi Dockerfile Anda dengan menyetel WORKDIR dan menyalin Pipfile / lockfile Anda ke dalamnya sebagai berikut mungkin bisa membantu:

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

Ini berhasil untuk saya. Ingatlah untuk membuat /code dir sebelumnya.

Ini berhasil untuk saya. Ingatlah untuk membuat /code dir sebelumnya.

perintah WORKDIR sudah membuat direktori jika tidak ada

Menggunakan WORKDIR tidak berhasil untuk saya. Saya mendapatkan kesalahan

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

saat menggunakan dockerfile di bawah ini

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

ini tampaknya bukan kesalahan build, lihat # 4220

Sebagai catatan kecil, $PIP_USER tidak disetel oleh pipenv dan saya relatif tidak yakin tentang bagaimana $PYTHONUSERBASE berinteraksi dengannya

Juga, tanda --deploy akan menjadi tidak berguna dengan tanda --ignore-pipfile - --deploy digunakan untuk menjamin bahwa Pipfile dan Pipfile.lock sejajar, yaitu Pipfile.lock dihasilkan dari Pipfile . Jika Anda menunjukkan bahwa Anda ingin mengabaikan pipfile Anda, pemeriksaan ini tidak akan pernah terjadi.

Dalam kasus apa pun @killuazhu , kesalahan di log yang Anda sertakan mungkin terkait dengan manipulasi jalur python Anda, tetapi akan memerlukan penyelidikan lebih lanjut jika Anda dapat mengajukan masalah terpisah

Sebagai referensi, masalah asli # 3434 terjadi ketika seseorang mencoba pipenv install bawah / tanpa Pipfile. Dan pengaturan di tiket ini menjadi pipenv install bawah / dengan Pipfile, yang dulunya berfungsi pada 2018.11.26. Namun, # 3386 memilih pendekatan resolusi yang salah, yang mencegah penggunaan dari direktori root sepenuhnya.

Terima kasih telah memperbaikinya, apakah Anda memiliki ETA tentang kapan perbaikan tersebut akan disertakan dalam rilis baru paket pypi?

kami perlu memastikan semua masalah regresi telah diperbaiki dan rilis baru akan keluar minggu depan

Luar biasa terima kasih, hargai!

Saya dapat memastikan bahwa perilaku ini tidak terjadi pada versi 2018.11.26 .

@mohamedMok Anda dapat menggunakan pip install 'pipenv==2018.11.26' yang merupakan versi terakhir yang tidak memiliki perubahan yang mengganggu ini.

Saya mendapatkan kesalahan yang sedikit berbeda saat menjalankan python3 -m pipenv install --three --system

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

Menyematkan ke versi lama juga berhasil untuk saya. Terima kasih!

Saya dapat memastikan bahwa perilaku ini tidak terjadi pada versi 2018.11.26 .
@mohamedMok Anda dapat menggunakan pip install 'pipenv==2018.11.26' yang merupakan versi terakhir yang tidak memiliki perubahan yang mengganggu ini.

Saya mendapatkan kesalahan yang sedikit berbeda saat menjalankan python3 -m pipenv install --three --system

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

Menyematkan ke versi lama juga berhasil untuk saya. Terima kasih!

Saya mengalami masalah yang sama. Sekarang menyematkan ke versi lama sebagai solusinya

kami perlu memastikan semua masalah regresi telah diperbaiki dan rilis baru akan keluar minggu depan

Masalah ini masih ada di rilis 2020.6.2:

Keluaran:
Gagal memuat jalur: / bin / sh: 1: /root/.local/share/virtualenvs/app-lp47FrbD/bin/python: tidak ditemukan

Bisakah Anda mengonfirmasi jika masalah ini diharapkan dapat diperbaiki pada rilis 2020.6.2?

Saya dapat mengonfirmasi bahwa saya mengatasi masalah ini dengan 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 Bisakah Anda membuka kembali masalahnya?

Saya juga dapat mengonfirmasi bahwa saya mengalami masalah ini dengan Dockerfile berikut:

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"]

Inilah kesalahannya:

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

Untuk orang-orang yang masih mengalami masalah ini, perbaikan termudah adalah dengan mengkonfigurasi Dockerfile Anda sebagai:

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
...
Apakah halaman ini membantu?
0 / 5 - 0 peringkat