Pipenv: لم يعد Pipenv يعمل ضمن الدليل الجذر غير مدرج كتغيير كسر

تم إنشاؤها على ٢٨ مايو ٢٠٢٠  ·  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 هل هناك فرصة لإرسال العلاقات العامة لذكرها في سجل التغيير؟

لقد تقدمت بعلاقات عامة لمعالجة هذه المشكلة ، شكرًا للجميع.

ليست تغييرات مضحكة ، فجميع عمال الأرصفة لدينا يستخدمون تثبيت pipenv أثناء الإنشاء: /

واجهت نفس المشكلة ، باستخدام الإصلاح في https://github.com/pypa/pipenv/issues/4273#issuecomment -635303079 عملت معي.

فشلت عمليات إنشاء عامل الإرساء هذا الصباح بسبب تغيير في السلوك عند تشغيل pipenv install في الدليل الجذر.

هل يمكنك شرح سير العمل هنا - هل تستخدم --system ؟

كما ذكرت للتو في # 4275:

يرجع السبب الرئيسي للتغيير في المقام الأول إلى تحديد البيئات الافتراضية ومسارات بايثون ذات الصلة - على حد علمي ، كان هذا سببًا جوهريًا للأخطاء والكسر ولم ينجح بشكل أساسي. حقيقة أنه يكسر سير العمل هو أول ما أسمعه أنه يعمل على الإطلاق.

لا يُقصد بهذا أن يكون تغييرًا فاصلًا ، بل يهدف إلى منع تفاعل تم كسره مسبقًا - بالنسبة لأي شخص كان يعمل من أجله ، يرجى تضمين المجموعة الكاملة من وسيطات سطر الأوامر التي كنت تقوم بتمريرها إلى pipenv (على سبيل المثال pipenv install --<whatever> ومعلومات حول سير عملك:

  • هل كنت تستخدم عامل ميناء؟ بعض البنية التحتية للحاويات الأخرى؟
  • أي مستخدم كان يستدعي الأمر؟ ما هو UID (في الأساس ، كان حسابًا جذريًا)
  • هل قمت بتمرير --system إلى pipenv ، أو إنشاء Virtualenv الخاص بك ، أو السماح لـ pipenv بإنشاء واحد لك؟
  • ما هو نظام التشغيل الذي يعمل بيبنف تحته؟
  • ما هو إصدار بيثون؟

ربما يكون هذا كافيا الآن

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
  • لينكس
  • Python 3.8.1

في حالة ما إذا كان مفيدًا للتحقيق في المشكلة أو إعادة إنتاجها ، تظهر خطوات الإنشاء في Make target .

بالنسبة لأي شخص يرغب في استخدام أحدث إصدار من 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 docker تأتي مع 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 dir من قبل.

هذا عمل معي. فقط تذكر أن تقوم بإنشاء /code dir من قبل.

يقوم الأمر 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 المقابل. إذا أشرت إلى أنك تريد تجاهل ملف الأنابيب الخاص بك ، فلن يحدث هذا الفحص أبدًا.

على أي حال killuazhu ، قد يكون الخطأ في السجلات التي قمت بتضمينها مرتبطًا بالتلاعب في مسار

كمرجع ، فإن الإصدار الأصلي من # 3434 يحدث عندما يحاول الشخص pipenv install تحت / بدون ملف Pipfile. والإعداد في هذه التذكرة هو pipenv install أقل من / مع ملف Pipfile ، والذي كان يعمل في 2018.11.26. ومع ذلك ، اختار # 3386 أسلوب دقة خاطئ ، حيث يمنع الاستخدام من الدليل الجذر تمامًا.

شكرًا لك على الإصلاح ، هل لديك الوقت المقدر للوصول عند تضمين الإصلاح في إصدار جديد من حزمة 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: غير موجود

هل يمكنك من فضلك تأكيد ما إذا كان من المتوقع إصلاح هذه المشكلة في إصدار 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

بالنسبة للأشخاص الذين لا يزالون يواجهون هذه المشكلة ، فإن أسهل حل هو تكوين

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 التقييمات