Virtualenv: يكسر Setuptools v45.0.0 virtualenv على Python 2

تم إنشاؤها على ١٢ يناير ٢٠٢٠  ·  18تعليقات  ·  مصدر: pypa/virtualenv

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


بدأت جميع البرامج النصية لإنشاء البيئة الافتراضية المؤتمتة في Python 2 في الانهيار اليوم.

هنا مثال:

$ py -2.7-32 -m virtualenv foo
…
UnsupportedPythonVersion: Package 'setuptools' requires a different Python: 2.7.8 not in '>=3.5'
…
OSError: Command …\Scripts\python.exe - setuptools pip wheel failed with error code 1

يبدو أن هذا ناتج عن إصدار setuptools v45.0.0 بالأمس:

الإصدار 45.0.0: 11 يناير 2020

1458: إسقاط دعم Python 2. تتطلب أدوات الإعداد الآن Python 3.5 أو أحدث. قم بتثبيت setuptools باستخدام نقطة> = 9 أو دبوس إلى Setuptools <45 للحفاظ على دعم 2.7.
1959: إصلاح لـ Python 4: استبدل غير الآمن six.PY3 بستة

https://setuptools.readthedocs.io/en/latest/history.html#v45 -0-0

يبدو أنه افتراضيًا ، يحاول virtualenv تثبيت أحدث أدوات الإعداد وأن pip install setuptools يلتقط setuptools>=45.0.0 على الرغم من أن هذه الإصدارات لا تدعم Python 2.

كحل بديل ، أستخدم الآن الأوامر التالية:

$ py -2.7-32 -m virtualenv --no-setuptools foo
$ foo\Scripts\python -m pip install "setuptools<45"

لا أقوم بالتصدير في عبوة Python ، لكنني أتوقع setuptools>=45 أن أعلن أنها لا تدعم Python 2 في بيانات التوزيع الوصفية وأن pip install setuptools سيكتشف ذلك تلقائيًا ويتجنبه ، لكن هذا لا يبدو أن هذا هو الحال.

إذا لم يكن ذلك ممكنا، ربما إصدارات virtualenv لبيثون 2 ينبغي أن يتجنب setuptools>=45 ؟

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

لقد نجح ما يلي في الخروج من هذه المشكلة.

تثبيت نقطة - ترقية 'أدوات الإعداد <45.0.0'

ال 18 كومينتر

أؤكد أن هذه مشكلة كبيرة. في OpenStack ، يتم كسر معظم البوابات أجهزة الصراف الآلي بسبب هذا. انظر: http://lists.openstack.org/pipermail/openstack-discuss/2020-January/011956.html

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

تم تتبعها بالفعل في setuptools من أجل آخر المصب https://github.com/pypa/setuptools/issues/1963

لست متأكدًا من سبب اختيار setuptools 45+ ، يجب أن يحتفظ Virtualenvs bootstrap عليه 44 لأدوات الإعداد. 🤔

هنا هو traceback: http://paste.openstack.org/show/788301/

يبدو أن legacy_resolve شيئًا من شأنه تجاهل القواعد الجديدة.

ناه ، طريق خاطئ للاستكشاف ، تتجاهل النقطة الأولية أيضًا قيود إصدار py (على الرغم من الإعلان عنها على أنها تعمل): http://paste.openstack.org/show/788302/

سآخذ نظرة وإطلاق الإصلاح غدا. إذا كان لدى أي شخص الوقت لإجراء العلاقات العامة قبل أن يساعد ذلك.

yoctozepto لا يبدو أنه يكرر فشلك ؛ هل يمكنك أن تعطينا سجل الإنشاء الكامل بإسهاب ثلاثي؟

gaborbernat إذا كانت نفس المشكلة مثل pypa / pip # 7586 ، فقد يكون هذا خطأ في إحدى مرايا PyPA التي يستخدمهاyoctozepto .

يبدو أن أحدهم لا ينشر معلومات python_requires بشكل صحيح.

إذا كان الأمر كذلك ، فهذا خطأ لتلك المرآة ؛ لا علاقة لنا بأنفسنا

لقد نجح ما يلي في الخروج من هذه المشكلة.

تثبيت نقطة - ترقية 'أدوات الإعداد <45.0.0'

أنا أعمل في مشروع لا يزال يستخدم python 2.7 :( ، ولدي نفس المشكلة.
لكن باستخدام الأمر أعلاه (بواسطة ikrambabai) ، نجح الأمر مرة أخرى !! :د
شكرا!

ومع ذلك ، لا يزال هذا أمرًا بالغ الأهمية عند إنشاء بيئة افتراضية جديدة لـ python 2.7 ، نظرًا لأن virtualenv سينزل setuptools-45.0.0 ، ولن تؤدي أي ترقية (الرجوع إلى إصدار سابق عبر النقطة بـ pip install --upgrade 'setuptools<45.0.0' ) إلى إزالتها بالفعل . الحل الوحيد هو تنزيل العجلة يدويًا.

ومع ذلك ، لا يزال هذا أمرًا بالغ الأهمية عند إنشاء بيئة افتراضية جديدة لـ python 2.7 ، نظرًا لأن virtualenv سينزل setuptools-45.0.0 ، ولن تؤدي أي ترقية (الرجوع إلى إصدار سابق عبر النقطة بـ pip install --upgrade 'setuptools<45.0.0' ) إلى إزالتها بالفعل . الحل الوحيد هو تنزيل العجلة يدويًا.

يجب أن يحدث هذا فقط إذا كنت تعمل خلف خادم فهرس لا ينشر متطلبات python ... لذلك أوصي بإصلاح خادم الفهرس.

gaborbernat لا أعرف. هل هناك طريقة بالنسبة لي للتحقق من ذلك؟

أستطيع أن أرى أن pythonhosted.org يُستخدم عند تنزيل الحزم عند إنشاء virtualenv:

Installing setuptools, pkg_resources, pip, wheel...
  Running command /opt/llenv22/bin/python2.7 - setuptools pkg_resources pip wheel
  Collecting setuptools
    Using cached https://files.pythonhosted.org/packages/af/e7/02db816dc88c598281bacebbb7ccf2c9f1a6164942e88f1a0fded8643659/setuptools-45.0.0-py2.py3-none-any.whl
  Collecting pkg_resources
  Collecting pip
    Using cached https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/pip-20.0.2-py2.py3-none-any.whl
  Collecting wheel
    Using cached https://files.pythonhosted.org/packages/00/83/b4a77d044e78ad1a45610eb88f745be2fd2c6d658f9798a15e384b7d57c9/wheel-0.33.6-py2.py3-none-any.whl

تمرير العلامات -v مقابل pip install setuptools -vvv ؟

يعمل ويتم تثبيت الإصدار الصحيح:

Collecting setuptools
  Created temporary directory: /tmp/pip-unpack-zJMfUH
  Starting new HTTPS connection (1): files.pythonhosted.org:443
  https://files.pythonhosted.org:443 "GET /packages/f9/d3/955738b20d3832dfa3cd3d9b07e29a8162edb480bf988332f5e6e48ca444/setuptools-44.0.0-py2.py3-none-any.whl HTTP/1.1" 200 583230
  Downloading setuptools-44.0.0-py2.py3-none-any.whl (583 kB)
     |████████████████████████████████| 583 kB 3.3 MB/s
  Added setuptools from https://files.pythonhosted.org/packages/f9/d3/955738b20d3832dfa3cd3d9b07e29a8162edb480bf988332f5e6e48ca444/setuptools-44.0.0-py2.py3-none-any.whl#sha256=180081a244d0888b0065e18206950d603f6550721bd6f8c0a10221ed467dd78e to build tracker '/tmp/pip-req-tracker-OTDORt'
  Removed setuptools from https://files.pythonhosted.org/packages/f9/d3/955738b20d3832dfa3cd3d9b07e29a8162edb480bf988332f5e6e48ca444/setuptools-44.0.0-py2.py3-none-any.whl#sha256=180081a244d0888b0065e18206950d603f6550721bd6f8c0a10221ed467dd78e from build tracker '/tmp/pip-req-tracker-OTDORt'
Installing collected packages: setuptools
  Created temporary directory: /tmp/pip-unpacked-wheel-vDEYe

تنشأ المشكلة فقط عند إنشاء البيئة الافتراضية.

ostefano كان الأمر نفسه بالنسبة لي. لقد عملت حول هذا عن طريق تثبيت setuptools صراحة:

$ py -2.7-32 -m virtualenv --no-setuptools foo
$ foo\Scripts\python -m pip install "setuptools<45"

لقد واجهنا نفس المشكلة: https://github.com/mozilla-services/syncserver/issues/239
في البداية اعتقدت أن موقع pythonhosted.org لا يحترم علامة Requires-Python ولكن بنفس المرآة ، فإنه يعمل على Debian Stretch مع Python 2.7.13 بينما يفشل في Ubuntu Xenial مع Python 2.7.12 ، وإلا فإن إعدادات النظام نظيفة جدًا ، حتى تم اختباره في بيئة Docker. لا يمكن أن يكون إصدار Python هو السبب حيث تم الإبلاغ عن نفس المشكلة بالفعل مع Ubuntu Bionic و Python 2.7.17.

لذلك أنا في حيرة من أمر أين / على أي مستوى يجب البحث عن الخطأ ، Python ، virtualenv ، pip ، pythonhosted.org أو هل هناك شيء ما في المنتصف؟
الحل واضح ولكن سيكون من الرائع التحقيق وإصلاح سبب سحب setuptools 45 في المقام الأول.

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