【问题标题】:Why do I get so many wheel files when I download a Python package using pip为什么我使用 pip 下载 Python 包时会得到这么多的轮子文件
【发布时间】:2020-09-30 00:44:32
【问题描述】:

我执行了这个:

$ pip download virtualenv
Collecting virtualenv
  Using cached virtualenv-20.0.31-py2.py3-none-any.whl (4.9 MB)
  Saved d:\test\gits\virtualenv-20.0.31-py2.py3-none-any.whl
Collecting appdirs<2,>=1.4.3
  Using cached appdirs-1.4.4-py2.py3-none-any.whl (9.6 kB)
  Saved d:\test\gits\appdirs-1.4.4-py2.py3-none-any.whl
Collecting six<2,>=1.9.0
  Using cached six-1.15.0-py2.py3-none-any.whl (10 kB)
  Saved d:\test\gits\six-1.15.0-py2.py3-none-any.whl
Collecting distlib<1,>=0.3.1
  Using cached distlib-0.3.1-py2.py3-none-any.whl (335 kB)
  Saved d:\test\gits\distlib-0.3.1-py2.py3-none-any.whl
Collecting filelock<4,>=3.0.0
  Using cached filelock-3.0.12-py3-none-any.whl (7.6 kB)
  Saved d:\test\gits\filelock-3.0.12-py3-none-any.whl
Successfully downloaded virtualenv appdirs six distlib filelock

虽然我尝试下载一个包,但我得到了这些轮子文件:

appdirs-1.4.4-py2.py3-none-any.whl  
six-1.15.0-py2.py3-none-any.whl
distlib-0.3.1-py2.py3-none-any.whl  
virtualenv-20.0.31-py2.py3-none-any.whl
filelock-3.0.12-py3-none-any.whl

现在我的问题是:

  1. 为什么会有这么多的 wheel 文件,而不仅仅是一个名为 virtualenv-20.0.31-py2.py3-none-any.whl 的文件?
  2. 现在,一旦我将它下载并存储在我的计算机或网络位置的某个位置,我该如何进行安装?
  3. 如果我在尝试安装时只有 virtualenv-20.0.31-py2.py3-none-any.whl 而没有其他 wheel 文件会怎样?

【问题讨论】:

    标签: python pip


    【解决方案1】:

    1 .使用pip download 还会下载依赖项,而您看到的那些额外文件正是 virtualenv 发行版的 deps:

    $ johnnydep virtualenv
    name                    summary
    ----------------------  -------------------------------------------------------------------------------------------------
    virtualenv              Virtual Python Environment builder
    ├── appdirs<2,>=1.4.3   A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".
    ├── distlib<1,>=0.3.1   Distribution utilities
    ├── filelock<4,>=3.0.0  A platform independent file lock.
    └── six<2,>=1.9.0       Python 2 and 3 compatibility utilities
    

    如果你只想要包本身没有依赖,使用:

    pip download --no-deps virtualenv
    

    2 。可以直接用pip安装一个wheel文件

    pip install ./virtualenv-20.0.31-py2.py3-none-any.whl
    

    3 .如果您使用--no-deps 安装该应用程序将无法正常运行,可能会由于缺少依赖项而导致某些ImportError 崩溃。

    $ pip install -q --no-deps virtualenv
    $ virtualenv .venv
    Traceback (most recent call last):
        ...
    ModuleNotFoundError: No module named 'appdirs'
    

    否则它只会从 PyPI 或您的 pip 配置的任何索引收集和安装依赖项 - 请参阅 pip config list

    【讨论】:

    • 好的,现在怎么知道哪个是我们必须放入 pip 安装的真正包,哪些只是依赖项?另外,如果有人想知道轮子是否代表旧版本的包而不是最新版本。
    • 嗯,您要求的软件包将在文件名中包含分发名称 :) 如果您想查找它是否是最新版本,您必须检查索引 - 请参阅此处的选项@ 987654321@
    • 是的,我知道分发名称应该在文件名中。但是,如果我有一个包含很多轮子文件的文件夹并且忘记了我下载到那里的包怎么办?
    • 是的,如果?为什么会有任何不同?
    • 您可以使用requirements.txt 文件,一旦您有了工作环境,您就可以使用pip freeze 生成它。下载这些包中的每一个,并使用pip install --no-index -r requirements.txt,那么您根本不需要互联网访问,因此代理不会造成麻烦。对于更现代的方法,请使用poetry lock file
    【解决方案2】:
    1. 那些额外的轮子就是依赖,包括递归(传递)依赖,即依赖的依赖。

    pip install --find-links /path/to/download/dir/ virtualenv-20.0.31-py2.py3-none-any.whl
    
    1. pip 尝试从配置的索引服务器下载依赖项,默认是 PyPI。无法下载任何依赖项pip 无法安装任何东西。它退出并显示错误消息和错误代码。

    【讨论】:

    • 也许如果你想在本地目录中使用--find-links 和一个操舵室,通过--no-index 也很好(这样如果你的某些东西丢失了,pip 就不会只转到 PyPI本地目录)。
    • "顺利通过--no-index" 取决于用户是在线还是离线。
    • 如何知道哪些是我们必须放入 pip 安装的真正包,哪些只是依赖项?此外,如果有人想知道轮子是否代表旧版本的软件包而不是最新版本怎么办。为了让我不必忍受很难克服的工作场所代理问题,我想在我们的工作网络上使用 python 包。
    • @Quantum0xE7 你在向后看。您已经从pip download virtualenv 开始,所以您肯定知道virtualenv 是要安装的包,而其他所有内容都是依赖项。
    • 好吧,同样的基本想法是,当我使用 pip 下载内容时,我会遇到工作代理妨碍的问题。加班我们已经应用了修复程序,但最终出现了一些新问题,我们必须找到新的修复程序。现在,因为我们只是真的想做我们真正的工作,解决这个问题的一种方法是下载并将它们的包作为轮文件存储在我们自己的内部网络上。现在只是出于好奇,我想知道,如果 pip install 中要使用的特定包名的实际说明丢失了怎么办,我们可以一个一个地安装它们,最后一切都会正常吗?
    猜你喜欢
    • 2021-10-23
    • 2012-09-10
    • 2012-07-08
    • 2021-12-04
    • 1970-01-01
    • 2012-06-16
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多