Virtualenv: نقطة تثبيت Virtualenv مكسورة / مفقودة حزمة zipp

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

شكرا لإرسال قضية!

في حالة إرسال BUG ، يرجى تقديم:

  • [x] مثال أقل استنساخًا أو وصفًا تفصيليًا
  • [x] ناتج إنشاء البيئة الافتراضية مع تضمين إشارات -vvv --with-traceback
  • [] pip list من البيئة حيث تم تثبيت virtualenv في حالة عدم استخدام zipapp

لقد أنشأت ملف Dockerfile بسيطًا قابلاً للتكرار ، وهو شرح ذاتي:

FROM ubuntu:16.04

RUN apt-get update && apt-get install -y --no-install-recommends \
    python python-pip python-pkg-resources python-setuptools python-wheel python-dev libxslt1-dev
RUN pip install virtualenv --disable-pip-version-check --no-cache-dir


WORKDIR /root
RUN virtualenv venv

سجل التثبيت الكامل:

UN pip install virtualenv --disable-pip-version-check --no-cache-dir
 ---> Running in 92fa3d30b758
Collecting virtualenv
  Downloading https://files.pythonhosted.org/packages/a3/dd/e43866ac0d25cd1ecbde0814f6cd7372ea257fbdf443dc9f0a01740da93d/virtualenv-20.0.4-py2.py3-none-any.whl (4.6MB)
Collecting six<2,>=1.9.0 (from virtualenv)
  Downloading https://files.pythonhosted.org/packages/65/eb/1f97cb97bfc2390a276969c6fae16075da282f5058082d4cb10c6c5c1dba/six-1.14.0-py2.py3-none-any.whl
Collecting distlib<1,>=0.3.0 (from virtualenv)
  Downloading https://files.pythonhosted.org/packages/7d/29/694a3a4d7c0e1aef76092e9167fbe372e0f7da055f5dcf4e1313ec21d96a/distlib-0.3.0.zip (571kB)
Collecting importlib-metadata<2,>=0.12; python_version < "3.8" (from virtualenv)
  Downloading https://files.pythonhosted.org/packages/8b/03/a00d504808808912751e64ccf414be53c29cad620e3de2421135fcae3025/importlib_metadata-1.5.0-py2.py3-none-any.whl
Collecting appdirs<2,>=1.4.3 (from virtualenv)
  Downloading https://files.pythonhosted.org/packages/56/eb/810e700ed1349edde4cbdc1b2a21e28cdf115f9faf263f6bbf8447c1abf3/appdirs-1.4.3-py2.py3-none-any.whl
Collecting importlib-resources<2,>=1.0; python_version < "3.7" (from virtualenv)
  Downloading https://files.pythonhosted.org/packages/2f/f7/b4aa02cdd3ee7ebba375969d77c00826aa15c5db84247d23c89522dccbfa/importlib_resources-1.0.2-py2.py3-none-any.whl
Collecting filelock<4,>=3.0.0 (from virtualenv)
  Downloading https://files.pythonhosted.org/packages/14/ec/6ee2168387ce0154632f856d5cc5592328e9cf93127c5c9aeca92c8c16cb/filelock-3.0.12.tar.gz
Collecting contextlib2<1,>=0.6.0; python_version < "3.3" (from virtualenv)
  Downloading https://files.pythonhosted.org/packages/85/60/370352f7ef6aa96c52fb001831622f50f923c1d575427d021b8ab3311236/contextlib2-0.6.0.post1-py2.py3-none-any.whl
Collecting pathlib2<3,>=2.3.3; python_version < "3.4" and sys_platform != "win32" (from virtualenv)
  Downloading https://files.pythonhosted.org/packages/e9/45/9c82d3666af4ef9f221cbb954e1d77ddbb513faf552aea6df5f37f1a4859/pathlib2-2.3.5-py2.py3-none-any.whl
Collecting zipp>=0.5 (from importlib-metadata<2,>=0.12; python_version < "3.8"->virtualenv)
  Downloading https://files.pythonhosted.org/packages/60/85/668bca4a9ef474ca634c993e768f12bd99af1f06bb90bb2655bc538a967e/zipp-2.2.0.tar.gz
  Running setup.py (path:/tmp/pip-build-pW7K_Y/zipp/setup.py) egg_info for package zipp produced metadata for project name unknown. Fix your #egg=zipp fragments.
Collecting configparser>=3.5; python_version < "3" (from importlib-metadata<2,>=0.12; python_version < "3.8"->virtualenv)
  Downloading https://files.pythonhosted.org/packages/7a/2a/95ed0501cf5d8709490b1d3a3f9b5cf340da6c433f896bbe9ce08dbe6785/configparser-4.0.2-py2.py3-none-any.whl
Collecting typing; python_version < "3.5" (from importlib-resources<2,>=1.0; python_version < "3.7"->virtualenv)
  Downloading https://files.pythonhosted.org/packages/22/30/64ca29543375759dc589ade14a6cd36382abf2bec17d67de8481bc9814d7/typing-3.7.4.1-py2-none-any.whl
Collecting scandir; python_version < "3.5" (from pathlib2<3,>=2.3.3; python_version < "3.4" and sys_platform != "win32"->virtualenv)
  Downloading https://files.pythonhosted.org/packages/df/f5/9c052db7bd54d0cbf1bc0bb6554362bba1012d03e5888950a4f5c5dadc4e/scandir-1.10.0.tar.gz
Installing collected packages: six, distlib, contextlib2, unknown, scandir, pathlib2, configparser, importlib-metadata, appdirs, typing, importlib-resources, filelock, virtualenv
  Running setup.py install for distlib: started
    Running setup.py install for distlib: finished with status 'done'
  Running setup.py install for unknown: started
    Running setup.py install for unknown: finished with status 'done'
  Running setup.py install for scandir: started
    Running setup.py install for scandir: finished with status 'done'
  Running setup.py install for filelock: started
    Running setup.py install for filelock: finished with status 'done'
Successfully installed appdirs-1.4.3 configparser-4.0.2 contextlib2-0.6.0.post1 distlib-0.3.0 filelock-3.0.12 importlib-metadata-1.5.0 importlib-resources-1.0.2 pathlib2-2.3.5 scandir-1.10.0 six-1.14.0 typing-3.7.4.1 unknown-0.0.0 virtualenv-20.0.4
Removing intermediate container 92fa3d30b758
 ---> 6127ebfdaa58
Step 5/6 : WORKDIR /root
 ---> Running in 3998fd059d5e
Removing intermediate container 3998fd059d5e
 ---> 62a1db87d19c
Step 6/6 : RUN virtualenv venv
 ---> Running in c40b1478666a
Traceback (most recent call last):
  File "/usr/local/bin/virtualenv", line 7, in <module>
    from virtualenv.__main__ import run_with_catch
  File "/usr/local/lib/python2.7/dist-packages/virtualenv/__init__.py", line 3, in <module>
    from .run import cli_run
  File "/usr/local/lib/python2.7/dist-packages/virtualenv/run/__init__.py", line 9, in <module>
    from .plugin.activators import ActivationSelector
  File "/usr/local/lib/python2.7/dist-packages/virtualenv/run/plugin/activators.py", line 6, in <module>
    from .base import ComponentBuilder
  File "/usr/local/lib/python2.7/dist-packages/virtualenv/run/plugin/base.py", line 9, in <module>
    from importlib_metadata import entry_points
  File "/usr/local/lib/python2.7/dist-packages/importlib_metadata/__init__.py", line 9, in <module>
    import zipp
ImportError: No module named zipp
The command '/bin/sh -c virtualenv venv' returned a non-zero code: 1
bug

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

لذا حصلت على بعض المساعدة في IRC ، pip install -U pip أصلحت هذه المشكلة.

ومع ذلك ، سيكون هذا رائعًا لأي من:

  • ثابت أو
  • قم بإنهاء التثبيت برسالة خطأ إذا كان إصدار نقطة النظام قديمًا جدًا لدعم الإصدارات الحديثة

ال 25 كومينتر

تعمل نفس الأوامر إذا قمت بتغيير رقم إصدار Ubuntu إلى 18.04

لذا حصلت على بعض المساعدة في IRC ، pip install -U pip أصلحت هذه المشكلة.

ومع ذلك ، سيكون هذا رائعًا لأي من:

  • ثابت أو
  • قم بإنهاء التثبيت برسالة خطأ إذا كان إصدار نقطة النظام قديمًا جدًا لدعم الإصدارات الحديثة

لقد قمنا اليوم بتحسين هذا من خلال https://github.com/pypa/virtualenv/pull/1628 ؛ على الرغم من أن مجرد المحاولة يبدو أن هذا يقودك إلى:

Traceback (most recent call last):
  File "/usr/local/bin/virtualenv", line 6, in <module>
    from pkg_resources import load_entry_point
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 3241, in <module>
    <strong i="7">@_call_aside</strong>
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 3225, in _call_aside
    f(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 3254, in _initialize_master_working_set
    working_set = WorkingSet._build_master()
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 585, in _build_master
    return cls._build_from_requirements(__requires__)
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 598, in _build_from_requirements
    dists = ws.resolve(reqs, Environment())
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 786, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'zipp>=0.5' distribution was not found and is required by importlib-metadata

نظرًا لأن حزم zipp لا يمكنها العمل مع setuptools 41.0.0 ...

يعمل setuptools 42.0.0 رغم أنه في هذه الحالة 👍

هذا ليس خطأ في virtualenv ، إذا كنت pip install zipp سترى نفس المشكلة

إنه مزيج من شيئين:

  1. pip<9 سيتجاهل python_requires اختيار أحدث إصدار
  2. لا يمكن أن تستخدم نقطة python2.x العجلة py36-none-any لذا يجب أن تبني من المصدر
  3. لا يستطيع setuptools<30.3 إنشاء حزم بيانات وصفية من المصدر

لذلك ينتهي بك الأمر بـ:

  • تثبيت معطل لـ python3.6 + zipp على python2.x باسم "unknown == 0.0.0"

أسهل حل هو استخدام إصدار أحدث من pip لتثبيت virtualenv ، أو لاستخدام zipapp

gaborbernat لا أعتقد أن هذا هو virtualenv نفسه ، حيث يتم توفير عجلة py2.py3-none-any هناك ، وسيتم استخدامها على طول الطريق إلى pip==1.5

نعم ، إنها ليست نفسها. لكن مستخدمينا أصيبوا بهذا ؛ أنا مغرم بالارتداد https://github.com/pypa/virtualenv/blob/master/setup.py#L4 إلى 42 ... والذي يبدو أنه يحل المشكلة

هذا الرمز لا يعمل على الإطلاق عند تثبيته من عجلة

من وجهة نظر المستخدم ، سيكون الأفضل هو ظهور رسالة خطأ تقول شيئًا مثل: "إصدار نقطة غير مدعوم ، يرجى تشغيل" تثبيت Pip -U pip "أولاً".

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

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

gaborbernat الذي لا يساعد على الرغم من ذلك ، ستستمر النقطة في تثبيت إصدار zipp غير متوافق مع python قيد التشغيل (1.1 هو الإصدار الأخير الذي يدعم python2.x):

$ virtualenv venv -ppython2
Running virtualenv with interpreter /usr/bin/python2
Already using interpreter /usr/bin/python2
New python executable in /tmp/y/venv/bin/python2
Also creating executable in /tmp/y/venv/bin/python
Installing setuptools, pip, wheel...
done.
$ . venv/bin/activate
$ pip install 'pip<9' 'setuptools>=42'
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Collecting pip<9
  Using cached pip-8.1.2-py2.py3-none-any.whl (1.2 MB)
Requirement already satisfied: setuptools>=42 in ./venv/lib/python2.7/site-packages (44.0.0)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 20.0.2
    Uninstalling pip-20.0.2:
      Successfully uninstalled pip-20.0.2
Successfully installed pip-8.1.2
$ pip install zipp
Collecting zipp
  Downloading https://files.pythonhosted.org/packages/60/85/668bca4a9ef474ca634c993e768f12bd99af1f06bb90bb2655bc538a967e/zipp-2.2.0.tar.gz
Building wheels for collected packages: zipp
  Running setup.py bdist_wheel for zipp ... done
  Stored in directory: /home/asottile/.cache/pip/wheels/a0/1f/9d/d132b3fbc38b33322681e3a7830c0a29fce7f55c3a06b85c65
Successfully built zipp
Installing collected packages: zipp
Successfully installed zipp-2.2.0
You are using pip version 8.1.2, however version 20.0.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

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

كل ما نحتاج إلى القيام به هنا هو توثيق ما قاله asottile أعلاه وفقًا لـ https://github.com/pypa/virtualenv/issues/1618

من وجهة نظر المستخدم ، سيكون الأفضل هو ظهور رسالة خطأ تقول شيئًا مثل: "إصدار نقطة غير مدعوم ، يرجى تشغيل" تثبيت Pip -U pip "أولاً".

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

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

التي لاحظت أنك تم تعطيلها في نص عامل التحميل

أين؟ أرى جميع التحذيرات ، Python 2.7 EOL ، إلخ.

على أي حال ، ربما يكون أفضل شيء يمكننا القيام به هو الحصول على هذا هنا من أجل Google ، على الأقل الآن يجد هذه المشكلة لـ "ImportError: لا توجد وحدة باسم zipp" حتى يتمكن الأشخاص من العثور على إصلاح تحديث النقطة.

- تعطيل-نقطة-فحص الإصدار

هذا مطلوب في Dockerfile لتجنب التخزين المؤقت. كنت أفكر في نوع من التحذير مثل الخطوط الحمراء 2.7 EOL ، تلك واضحة جدًا.

لذلك حاولت بدونها ، وهذا يظهر فقط أنه لا معنى له.

You are using pip version 8.1.1, however version 20.0.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

خط. بالطبع يقوم الجميع بتعطيل هذا في Dockerfiles حيث يتم عرض هذا دائمًا ، حتى بمجرد إصدار 20.0.3.

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

$ pip3 --version
WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.
Please see https://github.com/pypa/pip/issues/5599 for advice on fixing the underlying issue.
To avoid this problem you can invoke Python with '-m pip' instead of running pip directly.
pip 20.2.3 from /Users/jackjack/Library/Python/3.7/lib/python/site-packages/pip (python 3.7)
$ pip3 install -U pip
# removing repeated "pip is being invoked by an old script wrapper" messages
Defaulting to user installation because normal site-packages is not writeable
Requirement already up-to-date: pip in /Users/jackjack/Library/Python/3.7/lib/python/site-packages (20.2.3)
$ pip3 install -U pip3
Defaulting to user installation because normal site-packages is not writeable
ERROR: Could not find a version that satisfies the requirement pip3 (from versions: none)
ERROR: No matching distribution found for pip3
$ pip3 install -U virtualenv
Defaulting to user installation because normal site-packages is not writeable
Requirement already up-to-date: virtualenv in /Users/jackjack/Library/Python/3.7/lib/python/site-packages (20.0.33)
Requirement already satisfied, skipping upgrade: distlib<1,>=0.3.1 in /Users/jackjack/Library/Python/3.7/lib/python/site-packages (from virtualenv) (0.3.1)
Requirement already satisfied, skipping upgrade: appdirs<2,>=1.4.3 in /Users/jackjack/Library/Python/3.7/lib/python/site-packages (from virtualenv) (1.4.4)
Requirement already satisfied, skipping upgrade: importlib-metadata<3,>=0.12; python_version < "3.8" in /Users/jackjack/Library/Python/3.7/lib/python/site-packages (from virtualenv) (2.0.0)
Requirement already satisfied, skipping upgrade: six<2,>=1.9.0 in /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/site-packages (from virtualenv) (1.12.0)
Requirement already satisfied, skipping upgrade: filelock<4,>=3.0.0 in /Users/jackjack/Library/Python/3.7/lib/python/site-packages (from virtualenv) (3.0.12)
Requirement already satisfied, skipping upgrade: zipp>=0.5 in /Users/jackjack/Library/Python/3.7/lib/python/site-packages (from importlib-metadata<3,>=0.12; python_version < "3.8"->virtualenv) (3.3.0)
$ sudo /usr/bin/easy_install virtualenv
Searching for virtualenv
Best match: virtualenv 20.0.33
Processing virtualenv-20.0.33-py2.7.egg
virtualenv 20.0.33 is already the active version in easy-install.pth
Installing virtualenv script to /usr/local/bin

Using /Library/Python/2.7/site-packages/virtualenv-20.0.33-py2.7.egg
Processing dependencies for virtualenv
Searching for zipp>=0.4
Reading https://pypi.org/simple/zipp/
Downloading https://files.pythonhosted.org/packages/7b/50/8a41d217ae898bb7a422a55a2a2afc22dfaab42b7bce5fe771a3892fe5e7/zipp-3.3.0.tar.gz#sha256=64ad89efee774d1897a58607895d80789c59778ea02185dd846ac38394a8642b
Best match: zipp 3.3.0
Processing zipp-3.3.0.tar.gz
Writing /tmp/easy_install-QuPyHI/zipp-3.3.0/setup.cfg
Running zipp-3.3.0/setup.py -q bdist_egg --dist-dir /tmp/easy_install-QuPyHI/zipp-3.3.0/egg-dist-tmp-2lSPpU
  File "build/bdist.macosx-10.15-x86_64/egg/zipp.py", line 240
    def open(self, mode='r', *args, pwd=None, **kwargs):
                                      ^
SyntaxError: invalid syntax

zip_safe flag not set; analyzing archive contents...
Removing /Library/Python/2.7/site-packages/zipp-0.0.0-py2.7.egg
Copying zipp-0.0.0-py2.7.egg to /Library/Python/2.7/site-packages
zipp 0.0.0 is already the active version in easy-install.pth

Installed /Library/Python/2.7/site-packages/zipp-0.0.0-py2.7.egg
error: The 'zipp>=0.4' distribution was not found and is required by importlib-resources
$ /usr/bin/easy_install virtualenv
error: can't create or remove files in install directory

The following error occurred while trying to add or remove files in the
installation directory:

    [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/test-easy-install-20543.write-test'

The installation directory you specified (via --install-dir, --prefix, or
the distutils default setting) was:

    /Library/Python/2.7/site-packages/

Perhaps your account does not have write access to this directory?  If the
installation directory is a system-owned directory, you may need to sign in
as the administrator or "root" account.  If you do not have administrative
access to this machine, you may wish to choose a different installation
directory, preferably one that is listed in your PYTHONPATH environment
variable.

For information on other options, you may wish to consult the
documentation at:

  https://setuptools.readthedocs.io/en/latest/easy_install.html

Please make the appropriate changes for your system and try again.

أخطاء مماثلة حتى لو كان لدي sudo pip3 install 'd virtualenv

easy_install ليس نقطة ، لا تستخدمه فهو ليس ما تريده أبدًا

تدعي أدلة مختلفة (بما في ذلك هذا الدليل) أنه حل لهذه المشكلة (حيث يتم تثبيت virtualenv عبر pip ، ولكن لا يمكن العثور عليه في PATH ) ماذا تقترح كبديل؟

yikes ، بالتأكيد لا تتبع نصائحهم

في حالتك ، تقوم بتثبيت --user ، مما يعني أنك بحاجة إلى وضع دليل bin الصحيح على PATH - ربما /Users/jackjack/Library/Python/3.7/bin إذا كان عليّ التخمين (على الرغم من لست على دراية بنظام macOS)

يجب أن يكون التثبيت الأول قد حذرك من هذا الأمر (يمكنك على الأرجح الحصول على الرسائل مرة أخرى باستخدام pip3 uninstall virtualenv && pip3 install virtualenv

هممم ، ممتع. لذلك اتضح أن هناك بالفعل ملف /usr/local/bin/virtualenv بالمحتويات التالية:

#!/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
# EASY-INSTALL-ENTRY-SCRIPT: 'virtualenv==20.0.33','console_scripts','virtualenv'
__requires__ = 'virtualenv==20.0.33'
import re
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(
        load_entry_point('virtualenv==20.0.33', 'console_scripts', 'virtualenv')()
    )

لاحظ أنه من الصعب ترميزها إلى 2.7 في shebang ، وهو على الأرجح مصدر بعض المشكلات ، نظرًا لأنني أقوم بالتثبيت بـ pip3 .

كان علي التأكد من إضافة هذا المسار (الذي خمنته بشكل صحيح - والذي كان ناتجًا أيضًا من pip3 install virtualenv عندما أعدت التثبيت!) _before_ /usr/local/bin للتأكد من حصوله على الأسبقية. العمل الآن - شكرا!

أود أن أقترح إلغاء تثبيت ذلك ، ولكن لول ، easy_install لا يحتوي على إلغاء تثبيت (كانت تلك إحدى الميزات الكبيرة التي تم إحضارها إلى الجدول عند استبدال easy_install )

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