“ pip wheel”和“ pip download”有区别吗?

问题描述

我试图找出这两个python命令之间的区别:

pip wheel --wheel-dir=some_dir -r requirement.txt

pip download -d some_dir -r requirement.txt

起初,我认为认情况下,“ pip download”会从pypi.org索引中以“ whl”格式下载需求并将其放置在some_dir中,而“ pip wheel”会“提取”并构建需求,但仍在“ whl”中格式,从当前的python环境开始,并将它们放置在some_dir中。 但是显然,它们两者都从pypi.org索引下载了依赖项(认情况下)。 实际上,我在未安装任何“ requirements.txt”的(虚拟)python环境中尝试了“ pip wheel”命令,但仍在“ some_dir”中找到了所有“ whl”。不过,官方文档并未对此进行明确说明。

提出我的问题:

  1. 这两个命令等效吗? (在这种情况下,这看起来像是指令的复制,不是Guido叔叔的好设计原则!)
  2. 如何实现我的目标:从python环境中获取所需的whls并忽略任何互联网“索引”? (假设我已经从pypi.org获得了一个安装在venv中的模块,然后我对该模块进行了自定义,并且需要将这些修改引入每个使用自定义的whl模块文件创建的新克隆的venv环境中)

谢谢!

解决方法

我对这个问题也很好奇,官方文件确实含糊不清。

首先,在我的实验中,您提供的两个命令将产生相同的输出,并且过程非常相似。

但是在我仔细阅读了官方文档之后,我发现这两个命令的某些选项是不同的。

  • 对于pip download,此命令着重于从某处下载下载软件包,即使它也会尝试构建它,但如果它下载源包,它将回退无法建立。您可以使用一些选项来过滤要下载的软件包,即使这些软件包与当前环境不兼容。例如--platform--python-version--implementation,因此您可以下载打包所需的任何解释器。

  • 对于pip wheel,此命令专注于构建打包轮及其依赖项。它提供了一个--build-option选项,可让您自定义构建过程。因此,使用此命令,您只能下载与当前解释器和平台兼容的软件包。

我认为pip wheelpip install更像pip download,因为它只能使用当前的解释程序“下载”软件包。


现在提出您的问题:

  1. 这两个命令等效吗? (在这种情况下,这看起来像是指令的复制,不是Guido叔叔的好设计原则!)

回答:是的,对于与当前解释器兼容的软件包,它们几乎是等效的,只是您需要一些内置选项。

  1. 我如何实现从python环境中获取必需的whls并忽略任何互联网“索引”的目标?

回答:这两个命令都可以从本地索引或本地目录下载,但是如果要用于其他平台的软件包,则需要pip download。根据您的情况,您可以创建自己的索引或一个目录,其中包含您需要的所有软件包并每次都从那里安装。

期待更精确的答案。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...