بيئة
تم إعادة إنتاج هذا أيضًا باستخدام docker run python:3
.
وصف
يقوم pip بتثبيت حزمة ذات تبعيات معطلة ، إذا كان ملف القيود يحدد إصدارًا غير متوافق. ظهرت رسالة خطأ ، لكن رمز الخروج هو 0
.
على سبيل المثال ، يتطلب environs 5.2.1
marshmallow>=2.7.0
، لكن النقطة تثبته بـ marshmallow 2.6.0
إذا تم تحديد الأخير في ملف قيود.
سلوك متوقع
لا يجب تثبيت الحزمة ، والخروج مع الفشل.
كيفية التكاثر
marshmallow==2.6.0
environs==5.2.1
pip install -r requirements.txt -c constraints.txt
انتاج |
$ docker run --rm -ti python:3 sh
# python -V
Python 3.7.4
# pip -V
pip 19.2.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
# uname -a
Linux 4d4f16cc965f 4.9.184-linuxkit #1 SMP Tue Jul 2 22:58:16 UTC 2019 x86_64 GNU/Linux
# echo marshmallow==2.6.0 > constraints.txt
# echo environs==5.2.1 > requirements.txt
# pip install -r requirements.txt -c constraints.txt
Collecting environs==5.2.1 (from -r requirements.txt (line 1))
Downloading https://files.pythonhosted.org/packages/5f/c9/6b576b8b374dfe78d9435988e6a53497822f31b9da5bdd446343ad1a4d1b/environs-5.2.1-py2.py3-none-any.whl
Collecting marshmallow==2.6.0 (from -c constraints.txt (line 1))
Downloading https://files.pythonhosted.org/packages/33/44/c3bdd4222909b6452ebe5c028ea5dbe7e9409307b3b933026218c677fcf1/marshmallow-2.6.0-py2.py3-none-any.whl (44kB)
|████████████████████████████████| 51kB 729kB/s
Collecting python-dotenv (from environs==5.2.1->-r requirements.txt (line 1))
Downloading https://files.pythonhosted.org/packages/57/c8/5b14d5cffe7bb06bedf9d66c4562bf90330d3d35e7f0266928c370d9dd6d/python_dotenv-0.10.3-py2.py3-none-any.whl
ERROR: environs 5.2.1 has requirement marshmallow>=2.7.0, but you'll have marshmallow 2.6.0 which is incompatible.
Installing collected packages: marshmallow, python-dotenv, environs
Successfully installed environs-5.2.1 marshmallow-2.6.0 python-dotenv-0.10.3
# echo $?
0
هذا هو في الأساس نفس الرقم 988 (انظر أيضًا: # 5137).
تحدد Pip المتطلبات على أساس أول ظهور لها (على الرغم من أن ذلك عرضة للتغيير دون إشعار). عندما يتم تحليل ملف المتطلبات وملف القيود ، ينتهي بنا الأمر بـ environs==5.2.1
كمتطلب و marshmallow==2.6.0
كقيد. عندما environs
يتم معالجة، marshmallow
يلاحظ ك تبعية ودخول القائمة ( marshmallow==2.6.0
يتميز) كشرط، والنسخة الحالية هي واحدة تستخدم لتركيب . أعتقد أن استخدام القيمة التي يقدمها المستخدم (حتى لو كانت مجرد قيد) هو السلوك الأكثر صحة الذي يمكن أن نحصل عليه هنا.
الخطأ الذي يتم تتبعه هو نفسه الذي يمكن تتبعه لـ pip install environs==5.2.1 marshmallow==2.6.0
عادي أو استدعاءات منفصلة مثل pip install environs==5.2.1 && pip install marshmallow==2.6.0
.
تمت إضافة هذا في # 5000. السبب في أن رمز الخروج ليس 1 ، هو التوافق مع الإصدارات السابقة.
إذا كنت تريد أن تعرف برمجيًا أن هذا يحدث ، فأنت تريد تشغيل pip check
.
تم إغلاق هذه المشكلة تلقائيًا نظرًا لعدم وجود استجابة لطلبنا للحصول على مزيد من المعلومات من المؤلف الأصلي. مع المعلومات الموجودة حاليًا في المشكلة فقط ، ليس لدينا معلومات كافية لاتخاذ إجراء. يُرجى التواصل إذا كان لديك أو اعثر على الإجابات التي نحتاجها حتى نتمكن من إجراء مزيد من التقصي.