Pip: أضف "تثبيت النقطة - التشغيل الجاف" أو ما شابه ، للحصول على نتيجة الدقة

تم إنشاؤها على ١٥ مارس ٢٠١١  ·  58تعليقات  ·  مصدر: pypa/pip

ما هي المشكلة التي ستحلها هذه الميزة؟

لا تملك النقطة حاليًا أي آلية للمستخدمين للحصول على نتيجة قرار تبعية النقطة. هذه الوظيفة مفيدة للمستخدمين ليكونوا قادرين على:

  • إنشاء شيء مثل "ملف القفل"
  • التحقق مما إذا كان تثبيت الحزمة سيؤدي إلى كسر البيئة الحالية
  • التحقق من تعارضات التبعية بين مجموعة الحزم
  • (أكثر؟)

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

صِف الحل الذي تريده

8032 يقترح خيار pip install --dry-run .

7819 يقترح أمر pip resolve .

1345 لديه المزيد من المقترحات. :)

من المحتمل أن يكون هناك المزيد من المقترحات في أداة تعقب المشكلات التي لا يمكنني العثور عليها.

حلول بديلة

دع الأدوات الأخرى التي لا تعتمد على الأنابيب في النظام البيئي توفر هذه الوظيفة للمستخدمين. يعد هذا دون المستوى الأمثل نظرًا لأن محلل النقطة لا يتم عرضه علنًا بأي شكل من الأشكال (لا يجوز استخدام الأجزاء الداخلية للنقطة مثل المكتبة).

المثال الأبرز هو مشروع pip-tools ، وهو أفضل إجابة حالية لأي مستخدم يبحث عن هذه الوظيفة.


ملاحظة: تم تحرير هذا الوصف بواسطة pradyunsg في أبريل 2020 (انظر تحرير السجل للحصول على التفاصيل) ، وتم إخفاء بعض التعليقات القديمة بالفعل حول هذه المشكلة.

dependency resolution UX feature request

التعليق الأكثر فائدة

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

ال 58 كومينتر

حسنًا ، ربما نحتاج إلى أمر لسرد جميع إصدارات الحزم المتوفرة في PyPI.
ما رأيك؟

يحب:

$ pip list Django

1.2.4

1.2.3

1.2.2

1.2.1

1.2

1.1.3

1.1.2

1.0.4

$

Original Comment By: Hugo Lopes Tavares

أحب تلك الفكرة.


Original Comment By: CarlFK

لقد نفذته للتو في مفترقتي. أريد آراء كارلجم وجيزديز وإيانب
قبل الدمج.

تحقق منه هنا: https://bitbucket.org/hltbra/pip-list-
الأمر / التغييرات / e5c135a46204


Original Comment By: Hugo Lopes Tavares

لم أفكر في هذا بعمق ، لكن يبدو أنه من الأفضل لي تحسين
أمر "search" لسرد الإصدارات أيضًا (ربما يسرد جميع الإصدارات بعلامة a -v
أو شيء من هذا القبيل) ، بدلاً من إضافة أمر منفصل جديد. هذه الوظيفة
يبدو منطقيا أنه جزء من البحث.


Original Comment By: Carl Meyer

سأكون موافقًا على إضافة هذا للبحث طالما تم تنفيذ ER الآخر الخاص بي
أيضًا حتى لا أحصل على 3000 سطر (حقًا) عندما أبحث عن إصدارات django.
(هناك أكثر من 1000 زيارة لـ "pip search django" بسبب كل django-foo
الحزم. )


Original Comment By: CarlFK

أعتقد أنه ليس من الضروري إظهار الإصدار الذي سيتم تثبيته طالما
هناك قائمة بالإصدارات المتاحة ، لأنه من السهل تحديد أي منها
هذه هي الأحدث. علاوة على ذلك ، لا يوجد سبب لاستخدام علم جديد لـ
تمكين إخراج هذه القائمة ، لأن النفقات العامة تميل نحو الصفر. إنه
مجرد تغيير بسيط:
https://bitbucket.org/jumpa/pip/changeset/62076643cf33


Original Comment By: jumpa

مرحبًا كارل ، لقد عبرت عن إضافة خيار لأمر البحث ، لكن خوفي
حدث ما حدث لأمر التثبيت: إذا كنت تريد "ترقية" أ
الحزمة ، تحتاج إلى استخدام خيار "تثبيت" - هذا غريب ، ونحن نعلم ذلك.

وإذا اعتقد معظم الناس أن إضافة خيار للبحث أفضل ، فأنا لا أرى ذلك أيضًا
مشكلة كبيرة في استخدام البحث - النسخ أو البحث - v.


Original Comment By: Hugo Lopes Tavares

أعتقد أن سرد جميع الإصدارات المتاحة بشكل افتراضي مطول للغاية. بعض
تحتوي الحزم على العديد من الإصدارات المتوفرة على pypi - عشرة أو عشرين ليست غير شائعة
على الاطلاق. سرد أحدث إصدار بشكل افتراضي وجميع الإصدارات مع العلم
يبدو معقولا.

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


Original Comment By: Carl Meyer

مرحبًا Jumpa ، فكرة رائعة لإظهار الإصدارات التي تستخدم الإصدار الذي تم الحصول عليه من xmlrpc
الإتصال!

حصلت على القصاصة التالية تبحث عن نقطة:

pip                       - pip installs packages.  Python packages.  An

استبدال easy_install (الإصدارات: 0.2 ، 0.2.1 ، 0.3 ، 0.3.1 ، 0.4 ، 0.5 ، 0.5.1 ،
0.6 ، 0.6.1 ، 0.6.2 ، 0.6.3 ، 0.7 ، 0.7.1 ، 0.7.2 ، 0.8 ، 0.8.1 ، 0.8.2)

ستكون هذه قائمة كبيرة من الحزم ، باستخدام الكثير من الإصدارات -
لأن بحثنا يهتم بالأسماء والملخصات. هل يجب أن نهتم به؟


Original Comment By: Hugo Lopes Tavares

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

pip list Django


1.2.4

1.2.3 installed

1.2.2

1.2.1

1.2

1.1.3

1.1.2

1.0.4

ملاحظة: العديد من مديري الحزم المشهورين مثل YUM (RedHat) و pkglist (BSD) و
يوفر dpkg (Debain) علامة أو أمر قائمة منفصل.


Original Comment By: Kelsey Hightower

كارل ، كنت أفكر في يوم آخر حول هذه القضية ، ولا بد لي من الاتفاق معها
كيلسي: أمر آخر ليس سيئًا.

فكر في استخدامنا علامة للإشارة إلى أنني أريد اسم الحزمة هذا فقط ، و
علامة أخرى للإشارة إلى أنني أريد استرداد جميع الإصدارات المتاحة.

إنه غريب بعض الشيء.

دعنا نحاول توضيح:

$ pip search -v --exact Django

عكس

$ pip list Django

تعمل فكرة Kelsey في إظهار الإصدار المثبت على تحسين القائمة
أمر.


Original Comment By: Hugo Lopes Tavares

لقد أجريت التغييرات في أمر البحث.

نظرًا لأن أمر البحث يعرض بالفعل الإصدار المثبت وأحدث إصدار متاح ، فمن المحتمل أن يكون من المنطقي زيادة أمر البحث لإدراج جميع الإصدارات المتاحة أيضًا.

ها هي التغييرات التي أجريتها: https://github.com/phuihock/pip/commit/46bad23b5bf31850a02803ea1ca18be5deca9db3

ما هو الوضع مع هذا؟ هل يمكن للمرء رؤية أحدث إصدار متوفر على PyPI باستخدام النقطة؟

هل هذا مطبق بالفعل؟ لقد كان هذا يزعجني منذ حوالي عامين حتى الآن ، وأود أن أرى هذا قد تم حله.
يبدو البحث المحدود جنبًا إلى جنب مع علامة الإصدارات حلاً قابلاً للاستخدام للغاية.

أردت فقط أن أضيف هنا أنني ركضت للتو عبر هذا الموضوع أثناء البحث عن كيفية إظهار الإصدارات ... لقد جربت حزمة pip search -v - بطريقة ما كان من الممكن أن يكون ذلك منطقيًا بالنسبة لي: وصف مطول للحزمة إلى يتم تثبيته ، بما في ذلك معلومات الإصدار ...

لقد أدركت _just_ أن هذه الوظيفة لم يتم تنفيذها بعد بعد أن سألني أحد زملائي عنها. هل هناك أي خطط ستتوفر في الإصدارات القادمة من النقطة ؟

أعتقد أن هذا العلاقات العامة قد يكون ذا صلة ، حيث يتم العمل عليه حاليًا؟

قد تكون مهتمًا أيضًا بحديث Linuxconf 2014 "Python Packaging 2.0: اللعب بشكل جيد مع الآخرين" حول الوضع الحالي ، بالإضافة إلى مستقبل حزم Python. قال المتحدث (إذا فهمت بشكل صحيح) أن بعض القيود المفروضة على البيانات الوصفية الموجودة في نقطة هي نتيجة لتصميم PyPI ، الذي كان يعتمد في الأصل على CPAN ، وأن إعادة صياغة الواجهة الخلفية لـ PyPI (مع استمرار التوافق مع البيانات الوصفية الحالية باستخدام الاختبارات) يجب أن يحسن الوضع. كان يتحدث في الغالب عن "شركات تكامل النظام" ، أي الحزم النهائية ، ولكن أعتقد أن ذلك سيؤثر على أشياء مثل هذه المشكلة ، مما يسهل حلها.

+1،000،000

وكيف الحال الان

الآن ، هل هناك أي طريقة لإظهار الإصدار الأحدث دون تثبيته؟
هذه المشكلة مفتوحة منذ عام 2011 ، التصحيح الذي رأيته أعلاه ليس سوى سطر واحد. :(

هذا يبدو وكأنه ميزة ثانوية للتمكين ، كيف لا يوجد خيار مكافئ لقول apt-cache madison في هذه المرحلة؟

أرغب حقًا في رؤية أحدث إصدار من حزمة PyPi عند البحث أيضًا. تعمل ميزة المطابقة التامة ، ولكني أستخدم awk كحل بديل.

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

wget -qO- https://pypi.python.org/pypi/uWSGI | egrep -o "uwsgi- [0-9]. [0-9]. [0-9] [0-9] .tar.gz" | فرز -u

wget -qO- https://pypi.python.org/pypi/uWSGI/json | grep '"version"'

andreif لن يتمكن هذا من العثور على الإصدار الصحيح (تتجاهل النقطة alphas و betas ونسخة مرشحة ، وما لم يتم توفير --pre). هذا أقرب (لكن لا توجد ضمانات أيضًا):
wget -qO- https://pypi.python.org/pypi/uWSGI/json | grep -E ' {8}"[0-9."]*": \[' | sort -V | tail -n 1 | tr -d ' ":['

حسنًا ، يجب أن تتضمن استجابة JSON شيئًا مثل "pre-version": "1.2.3a4" ، لذلك يمكن للمرء أن يستخدم تعبيرًا بسيطًا.

لا أفهم هذه المشكلة حقًا ... ما هذا؟

  • إضافة خيار جديد على pip install والذي سيجعل النقطة تعمل فقط حتى حل الحزم وطباعة الحزم المحددة والخروج (تخطي التثبيت)؟
  • إظهار أحدث إصدار بجوار أسماء الحزم عند استخدام pip search ؟

    • أن تكون قادرًا على رؤية أحدث إصدار من الحزمة على PyPI؟

يبدو أن هذا الأخير قد تم حله بالنسبة لي ومن المحتمل أن تحصل الأولى على مشكلة مخصصة جديدة.

pradyunsg حسنًا ، إذا كنت أتذكر بشكل صحيح ، فقد احتجت إلى طريقة بسيطة للتحقق من الإصدار المتاح حاليًا (كل من الإصدار والإصدار التجريبي). سيتم تثبيت هذا الإصدار بواسطة pip install -U [--pre] .

كنت بحاجة إليه من أجل برنامج نصي يقوم بإعداد Virtualenv. عندما يكون هناك إصدار أحدث من الحزمة ، سأل عما إذا كان يجب تحديث الإصدار الحالي أو الاحتفاظ به. لذلك يتم تغطية حالة الاستخدام هذه بواسطة بحث النقطة الجديد.

pkg="foo"; pip install --download /dev/null --no-cache-dir --no-binary :all: "$pkg" 2>&1 | egrep -i "$pkg"'-' | head -1 | egrep -io "$pkg"'-[^ ]+' | sed 's/^'"$pkg"'-\(.*\)\.tar\.gz$/\1/g'

نشر إصدار --download -deprecation ...

pkg="foo"; tmp="$(mktemp -d)"; pip download -d "$tmp" --no-cache-dir --no-binary :all: "$pkg" 2>&1 | egrep -i "$pkg"'-' | head -1 | egrep -io "$pkg"'-[^ ]+' | tr A-Z a-z | sed 's/^'"$pkg"'-\(.*\)\.tar\.gz$/\1/g'

باستخدام شيء مثل:

pip install foo==

يعطي قائمة بجميع الإصدارات المتاحة (لحزمة pypi المتاحة الصالحة ، الجزيء في هذه الحالة):

Could not find a version that satisfies the requirement molecule== (from versions: 1.20.1, 1.20.3, 1.21.1, 1.22.0, 1.23.0, 1.25.0, 1.25.1, 2.10.0, 2.10.1, 2.11.0, 2.12.0, 2.12.1, 2.13.0, 2.13.1, 2.14.0, 2.15.0, 2.16.0, 2.17.0, 2.18.0, 2.18.1, 2.19.0) No matching distribution found for molecule==

ولكن سيكون من الجيد أن تكون قادرًا على الحصول على الإصدار الذي سيتم تثبيته باستخدام pip دون تنزيله و / أو تثبيته فعليًا على dev / null :-)

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

أدوات النقطة هي أداة تعتمد على النقطة التي أعتقد أنها يمكن أن تساعد في بعض الأشياء التي يسأل عنها الأشخاص في هذا الموضوع: https://github.com/jazzband/pip-tools

إذا أعطيته قائمة بالتبعيات المجردة (أي بدون تحديد إصدارات) ، فسيخبرك بالإصدارات المحددة لكل متطلب وتبعية للتثبيت.

pkg="django"; echo "$pkg" | pip-compile - --output-file - | egrep -i '^'"$pkg"'=' | cut -d '=' -f 3- هو مجرد شيء سخيف (أكثر سخافة إذا كنت تعتقد أنه شيء آخر عليك تثبيته [أكثر سخافة إذا كنت بحاجة إلى دعم python2])

علاوة على ذلك ، يمكن إنجاز النقطة الكاملة لأدوات النقطة (& pipenv) باستخدام نقطة بسيطة وملف قيود. ( pip install -r reqs -c constraints; pip freeze > constraints ).

إضافة خيار جديد على pip install والذي سيجعل النقطة تعمل فقط حتى حل الحزم وطباعة الحزم المحددة والخروج (تخطي التثبيت)؟

لقد أجريت للتو بعض التدبير المنزلي المهم هنا ، وهذه المشكلة الآن تتعلق بتتبع / مناقشة حالة الاستخدام هذه + إذا / كيف ستتغير النقطة لاستيعاب هذا الطلب للوظائف الجديدة.


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

الاعتذار لأي شخص تم إخفاء تعليقه الذي لا يزال وثيق الصلة بالموضوع والمفيد ؛ لم أتمكن حقًا من معرفة سياق الكثير من التعليقات وقد تختفي تعليقاتك في الأضرار الجانبية.

نظرًا لأن هذه البطاقة تم حظرها من خلال تطوير محلل التبعية (# 988) ، فقد اعتقدت أنني سأذكر هنا أن الفريق يبحث عن مساعدة من المجتمع للمضي قدمًا في هذا الموضوع.

نحن بحاجة إلى فهم الظروف التي يفشل فيها المحلل الجديد بشكل أفضل ، لذلك نطلب من مستخدمي الأنابيب ذوي التبعيات المعقدة:

  1. جرب المحلل الجديد (استخدم الإصدار 20.1 ، قم بتشغيل --unstable-feature=resolver )
  2. كسرها: ص
  3. قدم مشكلة

يمكنك العثور على مزيد من المعلومات وإرشادات أكثر تفصيلاً هنا

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

لقد عملنا على تطوير طريقة تغليف لتطبيقات التعلم الآلي الكبيرة في تويتر والتي نطلق عليها اسم "ipex" والتي يمكن شحنها دون احتواء رمز الطرف الثالث حتى يتم تنفيذها لأول مرة (مما يقلل حجمها بشكل كبير). في حالة Pantsbuild / Pants # 8793 ، نقوم بإنشاء أرشيف pex قابل للتنفيذ والذي يستدعي مكتبة وقت تشغيل pex لحل المتطلبات (ينفذ pex النقطة تحت الأغلفة). أنا أعمل حاليًا على نموذج أولي يستبدل خطوة حل pex / pip الكاملة في وقت التشغيل باستبدال يسجل فقط عناوين URL لتنزيل المسافات من ( req.link ). هذا سريع للغاية من الناحية العملية (ويمكن تخزينه مؤقتًا بشكل دقيق للغاية) ، حيث يمكن إجراء التنزيل ونسخ الملف لإنشاء ملف pex "رطب" بشكل كامل بالتوازي.

تعتمد هذه القدرة (لتنزيل وتثبيت أطنان من العجلات / غير العجلات بالتوازي) على مجرد تعريض عنوان URL لأي عجلة أو بدون عجلة نضعها في ملف قفل ، وهو ما لم أراه مذكورًا هنا حتى الآن. يتيح ذلك للبنطل استدعاء pip مرة واحدة بالضبط (لحل عناوين URL للتنزيل) عند إنشاء ملف ipex مجفّف ، ومن ثم يمكن استهلاك نتيجة خطوة "الحل" هذه مع عناوين URL لتنزيل المتطلبات عند استدعاء ملف ipex لأول مرة على ملف آلة مختلفة دون الحاجة إلى استدعاء النقطة مرة أخرى.

تطلب الأمر الكثير من الجهد في # 7819 لنشر عناوين URL من أحشاء محلل v1 إلى الإخراج. لقد كان جهدًا أقل بكثير عندما حاولت أن أجعله يعمل مع محلل v2. في الوقت الحالي ، ربما نخطط لشحن بعض الإصدارات التجريبية من أمر --dry-run أو resolve داخليًا والذي يبث عناوين URL للتنزيل - إذا نجحنا في ذلك ، فمن المفترض أن يساعد ذلك في إظهار أي المشكلات المتبقية مع --unstable-feature=resolver في هذه الأثناء! : د: د

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

شكرا لك على الرابط!!

يوم الأحد 24 مايو 2020 الساعة 19:34 Tzu-ping Chung [email protected]
كتب:

كما ذكرت ، فإن تصميم تنسيق ملف القفل متعامد مع ملف
تنفيذ المحلل. ومع ذلك ، فهذا يعني أيضًا أنه خارج نطاق
مشروع النقطة الحالي. كانت هناك مناقشات حول هذا الموضوع
https://discuss.python.org/t/structured-exchangeable-lock-file-format-requirements-txt-2-0/876/1
(تحذير: خيط طويل جدا) ولكن مع مراعاة قلة وقت المطور
متاح ، وهذا بدوره يعني أن المناقشة الجادة من المحتمل ألا تكون كذلك
يحدث قبل استقرار المحلل على الأقل.

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/pypa/pip/issues/53#issuecomment-633346918 ، أو
إلغاء الاشتراك
https://github.com/notifications/unsubscribe-auth/AAJ6UT3IK65CUQGUIOGBNVDRTHKMVANCNFSM4AIQRXLA
.

cosmicexplorer هل قمت بشحن هذا الإصدار التجريبي من الأمر --dry-run أو resolve داخليًا حتى الآن؟ إذا كان الأمر كذلك ، كيف الحال؟

ربما لاحظت أنني مهتم جدًا بهذه الميزة 😄

باستخدام شيء مثل:

pip install foo==

يعطي قائمة بجميع الإصدارات المتاحة (لحزمة pypi المتاحة الصالحة ، الجزيء في هذه الحالة):

Could not find a version that satisfies the requirement molecule== (from versions: 1.20.1, 1.20.3, 1.21.1, 1.22.0, 1.23.0, 1.25.0, 1.25.1, 2.10.0, 2.10.1, 2.11.0, 2.12.0, 2.12.1, 2.13.0, 2.13.1, 2.14.0, 2.15.0, 2.16.0, 2.17.0, 2.18.0, 2.18.1, 2.19.0) No matching distribution found for molecule==

ولكن سيكون من الجيد أن تكون قادرًا على الحصول على الإصدار الذي سيتم تثبيته باستخدام pip دون تنزيله و / أو تثبيته فعليًا على dev / null :-)

خدعة لطيفة !! مفيد ومريح !! مؤثر فعلا !!

الاختراقات / شذرات البرمجة النصية المحتملة ... يرجى الامتناع عن نشر المزيد من هذه الأخيرة هنا - هناك منتديات أخرى لدعم المستخدمين حيث تكون هذه الاقتراحات أكثر ملاءمة ، وليس في المنتدى لمناقشة كيفية تنفيذ الإصلاح في الأداة نفسها. :)

ليس من أجل لا شيء ، حقًا ، ولكن هذا هو الشيء الذي يحدث عندما تترك خطأً باقياً لفترة طويلة جدًا (7.56 سنة في حالة "كتلة صلبة" التي ساهمت بها مؤخرًا ، على الرغم من أن هذا الخطأ لا يزال مفتوحًا الآن 9.25 سنة عمر او قديم). يشارك الناس الحلول الخاصة بهم.

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

ونعم ، هذا التعليق بالذات هو أيضًا ما يحدث عندما يحدث ما فعلته ردًا على هذا الخطأ الذي لا يزال مفتوحًا.

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

شكرا على ما تفعله. :)

brainwane @ ei8fdb أريد الإشارة إلى هذه المشكلة باعتبارها مهمة من منظور UX - المتعلقة بـ # 8377

ملخص عالي المستوى بناءً على فهمي:

  • باستخدام المحلل الجديد ، ستكون النقطة أقل تساهلاً وترفض تثبيت التبعيات المتضاربة ( ResolutionImpossible )
  • يمكن أن توجد تعارضات التبعية في أي مكان في شجرة التبعية
  • الأدوات الموجودة (مدقق تعارض الأنابيب pipdeptree) تعرض فقط الحزم المثبتة بالفعل ، وليست تلك التي تم طلبها ، ولكنها فشلت
  • لا توجد حاليًا طريقة للمستخدمين لمعرفة مكان تعارض التبعية قبل تثبيت الحزمة ، أو عند حدوث خطأ ResolutionImpossible (بخلاف فحص تبعيات كل مشروع يدويًا)

باختصار ، نحن بحاجة إلى وسيلة للمستخدمين لاكتشاف تعارضات التبعية المحتملة بناءً على متطلبات المستوى الأعلى لديهم (أي الحزم المحددة في requirements.txt أو التي تم إدخالها مباشرة في سطر الأوامر).

إذا قررنا القيام بذلك ، فيجب البحث / مناقشة اسم العلم المقترح ( --dry-run ).

uranusjrpfmoore - من فضلك صححني إذا حصلت على أي خطأ ، أو فاتني شيء بناءً على مناقشتنا. شكرا

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

ما لا يوفره هذا ، وهو الشيء الذي قد يكون IMO مفيدًا جدًا (إما كأمر فرعي للنقطة ، أو كأداة مفيدة مثل أداة طرف ثالث) هو طريقة لإدراج شكل شجرة التبعية التي تعمل من خلالها النقطة . (هذا لا يتطلب محلل أو خطوة تثبيت فعلية ، إنه "ببساطة" يقوم بإدراج البيانات الوصفية التبعية بشكل مؤقت من مصادر الحزمة).

يمكن أن يأخذ هذا أيضًا شكل أمر pip resolve .

pip resolve هو ما يتوقعه معظم الناس ، يرجى تسميته 😄 سيسمح أيضًا بوضع أعلامه الخاصة في النهاية.

شكرا للتوضيح pfmoore. من منظور المستخدم ، لست متأكدًا من مقدار استخدام --dry-run بدون resolve ؟

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

لذا ، تخيل أن مستخدمًا يدير --dry-run ... يمكننا تضمين شيء مثل هذا في الاستجابة:

تم اكتشاف تعارض في التبعية. لن تتمكن النقطة من تثبيت d 1.0 و c 1.0.
الصراع ناتج عن:
د 1.0 يعتمد على E == 2.0
ج 1.0 يعتمد على E == 1.0
قم بتشغيل pip resolve لتفقد شجرة التبعية.

يمكننا أيضًا إعادة استخدام pip resolve في رسالة الخطأ ResolutionImpossible (انظر # 8377) ، والذي سيكون بمثابة فوز كبير.

pradyunsg ، هل لدينا تذكرة منفصلة لـ pip resolve ؟

أيضًا ، فقط للتوضيح ، أعتقد أن حالة الاستخدام المقصودة لـ pip resolve هي إما (بافتراض النجاح):

  1. إعادة توجيه الإخراج إلى ملف (الذي سيتم الالتزام به عادة) ، أو
  2. أدوات أخرى سوف تستخدم / تحليل الإخراج

بالنسبة إلى twitter ، باستخدام أداة "ipex" كما هو موضح في # 7819 ، نقوم بإنشاء ملفات pex قابلة للتنفيذ باستخدام الأمر pip resolve والذي سينتج عناوين URL للتنزيل لجميع التوزيعات التي تم حلها بدلاً من تنزيل أي شيء (لم يتم استخدامه في الإنتاج حتى الآن ). هذا ، إلى جانب العديد من التحسينات الأخرى مثل # 8448 ، يسمح بإنشاء ملفات ipex هذه في غضون ثوانٍ. تقوم ملفات ipex هذه بعد ذلك بتنزيل جميع إخراج التوزيعات من الأمر pip resolve في المرة الأولى التي يتم تنفيذها فيها ، من داخل نفس مركز البيانات - وهذا يسمح لملفات ipex نفسها بأن تكون ميغا بايت بدلاً من جيجابايت ، مما يحسن وقت التحميل من مناطق عديدة.

لذلك قمنا بشكل أساسي بتضمين إصدار json من الناتج pip resolve كملف في أرشيف pex ، ولدينا برنامج bootstrap سكربت يقرأ ذلك لتنزيل التوزيعات بالتوازي.

أي تحديث على هذا؟

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

الرجاء تصحيح ما إذا كنت مخطئًا ، ولكن يبدو أن ما يلي صحيح:

  • يتضمن تثبيت حزمة Python تنفيذ setup.py.
  • بدون الخيار --dry-run ، لا توجد طريقة سهلة وموثوقة لمعرفة الحزم التي سيختار محلل النقطة تثبيتها.

ومن ثم ، يبدو لي أن تشغيل pip install يعني الموافقة على تشغيل الكود من اختيار عشوائي إلى حد ما لحزم PyPI على جهاز المرء دون طريقة سهلة وموثوقة لمراجعتها. يعتمد هذا التحديد بشكل متكرر على خيارات التبعية وممارسات الأمان لمؤلفي الحزم الفرديين.

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

حتى مع --dry-run ، من المحتمل أن تحتاج النقطة إلى تشغيل backends للبناء للحزم (التي تتضمن تشغيل setup.py بالنسبة لأدوات الإعداد) التي لا تحتوي على عجلات.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات