Virtualenv: pip install virtualenv paket zip yang rusak / hilang

Dibuat pada 14 Feb 2020  ·  25Komentar  ·  Sumber: pypa/virtualenv

Terima kasih telah mengirimkan masalah!

Jika mengirimkan BUG, ​​harap berikan:

  • [x] Contoh minimal yang dapat direproduksi atau deskripsi mendetail
  • [x] output dari pembuatan lingkungan virtual dengan flag -vvv --with-traceback disertakan
  • [] pip list dari lingkungan tempat virtualenv diinstal jika tidak menggunakan zipapp

Saya telah membuat Dockerfile minimal yang dapat direproduksi, itu cukup jelas:

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

Log penginstalan lengkap:

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

Komentar yang paling membantu

Jadi saya mendapat bantuan di IRC, pip install -U pip memperbaiki masalah ini.

Namun, ini bagus untuk:

  • tetap atau
  • hentikan instalasi dengan pesan kesalahan jika versi pip sistem terlalu tua untuk mendukung versi terbaru

Semua 25 komentar

Perintah yang sama berfungsi jika saya mengubah nomor versi Ubuntu menjadi 18.04

Jadi saya mendapat bantuan di IRC, pip install -U pip memperbaiki masalah ini.

Namun, ini bagus untuk:

  • tetap atau
  • hentikan instalasi dengan pesan kesalahan jika versi pip sistem terlalu tua untuk mendukung versi terbaru

Kami baru saja meningkatkannya hari ini dengan https://github.com/pypa/virtualenv/pull/1628; meskipun hanya mencoba tampaknya ini membuat Anda:

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

Karena paket zipp tidak dapat bekerja dengan setuptools 41.0.0 ...

setuptools 42.0.0 berfungsi meskipun dalam kasus ini 👍

ini bukan bug di virtualenv, jika Anda pip install zipp Anda akan melihat masalah yang sama

kombinasi dari dua hal:

  1. pip<9 akan mengabaikan python_requires memilih versi terbaru
  2. pip python2.x tidak dapat menggunakan roda py36-none-any sehingga harus dibangun dari sumber
  3. setuptools<30.3 tidak dapat membangun paket metadata deklaratif dari sumber

jadi Anda berakhir dengan:

  • instalasi rusak python3.6 + zipp pada python2.x bernama "tidak diketahui == 0.0.0"

perbaikan termudah adalah menggunakan versi terbaru pip untuk memasang virtualenv , atau menggunakan zipapp

@gaborbernat Saya rasa ini bukan virtualenv itu sendiri, karena roda py2.py3-none-any disediakan di sana, dan itu akan digunakan kembali ke pip==1.5

Ya, itu tidak sendiri; tapi pengguna kami terpukul dengan ini; Saya tergoda untuk mengganti https://github.com/pypa/virtualenv/blob/master/setup.py#L4 menjadi 42 ... yang sepertinya bisa menyelesaikannya.

kode itu tidak berjalan sama sekali saat dipasang dari roda

Dari sudut pandang pengguna, yang terbaik adalah pesan kesalahan yang mengatakan sesuatu seperti: "Versi pip tidak didukung, jalankan 'pip install -U pip' dulu".

Dalam kasus pemasangan roda, kami tidak dapat melakukan apa pun, masalahnya sudah melewati kami. Jika seseorang menginstal dari sumbernya maka mereka tidak membutuhkan pip yang lebih baru, cukup setuptools yang lebih baru. Jika mereka memiliki alat pengaturan yang lebih baru, kami dapat gagal dengan sesuatu yang lebih membantu. Ini yang terbaik yang bisa kita lakukan di sini, saya yakin.

Anda bahkan dapat menampilkannya saat runtime. Ini seharusnya hanya menampilkan pesan kesalahan ketika dijalankan pada versi pip yang sangat lama.

@gaborbernat yang tidak membantu, pip akan tetap menginstal versi zipp yang tidak kompatibel dengan python yang sedang berjalan (1.1 adalah versi terakhir yang mendukung 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.

Memikirkan ini secara menyeluruh, saya rasa kita tidak dapat melakukan apa pun di sini. Jika sudah terinstal, satu-satunya cara kita akan tahu apakah dependensi kita benar adalah dengan memeriksa secara manual ... dan itu sangat mahal.

Yang perlu kita lakukan di sini adalah mendokumentasikan apa yang dikatakan @asottile di atas sesuai https://github.com/pypa/virtualenv/issues/1618

Dari sudut pandang pengguna, yang terbaik adalah pesan kesalahan yang mengatakan sesuatu seperti: "Versi pip tidak didukung, jalankan 'pip install -U pip' dulu".

Mengingat bahwa pip sudah menghasilkan peringatan (yang saya perhatikan Anda nonaktifkan di skrip buruh pelabuhan) ketika Anda menggunakan versi yang lebih lama, menyarankan agar Anda meningkatkan, apakah menambahkan pesan lain yang memberi tahu Anda bahwa Anda menggunakan versi kedaluwarsa sebenarnya membantu?

(Itu bukan pertanyaan retoris atau sarkastik - salah satu masalah besar dengan pengemasan Python adalah setiap kali kami memperkenalkan standar baru, versi alat yang lebih lama tidak mendukungnya, dan kami perlu menemukan cara terbaik untuk mendorong pengguna untuk mengikuti to date. Jadi mengetahui apa yang berhasil dan tidak dalam cara kami mencoba menyampaikan pesan kepada pengguna sangat penting bagi kami).

yang saya perhatikan Anda dinonaktifkan dalam skrip buruh pelabuhan

Dimana? Saya melihat semua peringatan, Python 2.7 EOL, dll.

Bagaimanapun, mungkin hal terbaik yang dapat kami lakukan adalah memiliki ini di sini untuk Google, setidaknya sekarang masalah ini ditemukan untuk "ImportError: Tidak ada modul bernama zipp" sehingga orang dapat menemukan perbaikan pip update.

--disable-pip-version-check

Itu diperlukan di Dockerfile untuk menghindari caching. Saya sedang memikirkan semacam Peringatan seperti garis merah 2,7 EOL, itu sangat terlihat.

Jadi saya mencoba tanpa itu, dan itu hanya menunjukkan bahwa tidak ada artinya.

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.

garis. Tentu saja semua orang menonaktifkan ini di Dockerfiles karena ini selalu ditampilkan, bahkan setelah 20.0.3 akan dirilis.

Masih mendapatkan masalah ini, meskipun menggunakan pip versi terbaru:

$ 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.

Kesalahan serupa bahkan jika saya sudo pip3 install 'd virtualenv

easy_install bukan pip, jangan gunakan itu tidak pernah sesuai keinginan Anda

Berbagai panduan (termasuk yang satu ini ) mengklaim bahwa ini adalah perbaikan untuk masalah ini (di mana virtualenv diinstal melalui pip , tetapi tidak dapat ditemukan di PATH ). Apa yang akan Anda sarankan sebagai alternatif?

Astaga, jangan ikuti saran mereka

dalam kasus Anda, Anda melakukan instalasi --user , yang berarti Anda harus meletakkan direktori bin yang benar pada PATH - mungkin /Users/jackjack/Library/Python/3.7/bin jika saya harus menebak (meskipun Saya tidak terbiasa dengan macos)

penginstalan pertama seharusnya memperingatkan Anda tentang hal ini (Anda mungkin bisa mendapatkan pesan lagi dengan pip3 uninstall virtualenv && pip3 install virtualenv

Hmmm, menarik. Jadi ternyata sudah ada file a /usr/local/bin/virtualenv dengan isi sbb:

#!/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')()
    )

Perhatikan sulit-coding untuk 2.7 di shebang, yang mungkin merupakan sumber dari beberapa masalah, karena saya menginstal dengan pip3 .

Saya harus memastikan untuk menambahkan jalur itu (yang Anda tebak dengan benar - dan yang juga merupakan keluaran dari pip3 install virtualenv ketika saya menginstal ulang!) _Before_ /usr/local/bin untuk memastikannya diutamakan. Bekerja sekarang - terima kasih!

Saya sarankan untuk mencopot pemasangan itu, tetapi lol, easy_install tidak memiliki pencopotan (itu adalah salah satu fitur besar yang dibawa pip ke tabel saat mengganti easy_install )

Apakah halaman ini membantu?
0 / 5 - 0 peringkat