حزمتان من الملحن متعارضتان في إصدار التبعية

StackOverflow https://stackoverflow.com//questions/25055161

  •  21-12-2019
  •  | 
  •  

سؤال

لدي بالفعل Geoip2 تم تثبيت الحزمة.عندما قمت بتثبيته منذ بعض الوقت، كان يتطلب guzzle 3.*، لذلك قام بتثبيت guzzle 3.9.1 كأحد تبعياته.

الآن أريد تثبيت توقع الحزمة، لذلك قمت بإضافتها إلى ملف Composer.json الخاص بي

"require": {
    ...
    ...
    "geoip2/geoip2": "0.6.*",
    "predictionio/predictionio": "~0.7.1"
}

المشكلة هي توقع يتطلب guzzle 3.8.0 أو 3.8.1، ولن يقبل الإصدار 3.9.1 المثبت بالفعل.

أعتقد أسرف في الشراب 3.8.0 سوف يرضي كليهما Geoip2 و توقع, ، لذا فإن السؤال هو كيف يمكنني الرجوع إلى إصدار أقدم أسرف في الشراب, ، مع الأخذ في الاعتبار أسرف في الشراب لا يظهر في ملف الملحن.json الخاص بي، فقط ملف الملحن.لوك.

أدناه هو الإخراج عندما أقوم بتشغيل composer update predictionio/predictionio

  Problem 1
    - Installation request for predictionio/predictionio ~0.7.1 -> satisfiable by predictionio/predictionio[v0.7.1].
    - Conclusion: remove guzzle/guzzle v3.9.1
    - predictionio/predictionio v0.7.1 requires guzzle/guzzle ~3.8.0 -> satisfiable by guzzle/guzzle[v3.8.0, v3.8.1].
    - Can only install one of: guzzle/guzzle[v3.9.1, v3.8.0].
    - Can only install one of: guzzle/guzzle[v3.9.1, v3.8.1].
    - Installation request for guzzle/guzzle == 3.9.1.0 -> satisfiable by guzzle/guzzle[v3.9.1].
هل كانت مفيدة؟

المحلول

لا تحتاج إلى إضافة Guzzle إلى ملفك composer.json.كل ما عليك فعله هو تحديث Guzzle عند إضافة الحزمة الجديدة.(سيؤدي هذا إلى الرجوع إلى إصدار Guzzle ليتوافق مع متطلبات PredictionIO)

تشغيل ببساطة

composer update predictionio/predictionio guzzle/guzzle

كما ترون، يمكنك توفير حزم متعددة ل composer update عن طريق الفصل بينهما بمسافة.هذا موصوف في وثائق.

نصائح أخرى

بعض التلميحات المتعلقة بالسؤال:

عن طريق الركض composer update named/package, ، فأنت تسمح فقط بإضافة هذه الحزمة أو زيادة إصدارها، ولكن لا شيء آخر.سيحدث نفس الشيء (ولكن إضافة الأشياء فقط) مع composer require named/package:~1.0 (هذه طريقة رائعة لإضافة أشياء دون الحاجة إلى العبث بتنسيق json).

الحل الأكثر بساطة عند تحديث الأشياء هو التشغيل فقط composer update.بدون اسم الحزمة، قد يتم تحديث كافة الحزم.

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

يجب أن تسمح المكتبات التي تستخدمها بوجود إصدارات كافية ومحددة بشكل فضفاض من تبعياتها.في مثالك، predictionio/predictionio تتطلب الحزمة guzzle/guzzle:~3.8.0 - ربما لديهم أسباب للقيام بذلك، ولكنهم بدورهم يجبرون كل من يحاول استخدام برامجهم على استخدام Guzzle 3.8.0 أو 3.8.1.أشك في أن مشرفي Guzzle سيخرقون التوافق مع الإصدارات السابقة، لأنهم يعلمون أنهم ينشئون جزءًا أساسيًا مهمًا للغاية من البرامج التي من المتوقع أن تعمل، وأعتقد أنهم سيتلقون تقارير الأخطاء قريبًا جدًا إذا قاموا بتعطيل الأشياء بالرغم من ذلك.أود بشدة أن أرى تبعيات أي مكتبة للسماح بالتحديثات المتوافقة دون قيود، على سبيل المثال.في هذه الحالة ~3.8 سيكون أفضل بكثير.

تجنب الاعتماد على الفروع بأي ثمن.إذا كان لا مفر من استخدام فرع، فقم بتعيين رقم إصدار بديل له: require: { "named/package": "dev-master as 1.2.2" } إذا لم يكن من الممكن تخمين رقم الإصدار الصحيح من الإصدارات السابقة، فابدأ بـ 0.0.0.وبهذه الطريقة يمكنك التبديل إلى الإصدار الذي تم إصداره لاحقًا، والذي سيتم دمجه بشكل أفضل في بقية أرقام الإصدارات.

إذا كنت ترغب في تثبيت إصدار محدد من الحزمة، فيمكنك ببساطة إضافة هذا إلى ملف Composer.json الخاص بك في ملف يتطلب قسم:

    "guzzle/guzzle" : "3.8.0",

وثم

  composer update guzzle/guzzle
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top