如何使用Python的pip下载并保留软件包的压缩文件?

169

如果我想使用pip命令下载一个包(及其依赖项),但保留所有被下载的压缩文件(比如django-socialregistration.tar.gz)——有没有什么办法可以实现这个目标?

我尝试过各种命令行选项,但它似乎总是会解压并删除zip文件或者只为原始包获取zip文件,而不是获取依赖项的zip文件。

9个回答

149

pip install --download已被弃用。从版本8.0.0开始,您应该使用pip download命令:

 pip download <package-name>

8
如何安装下载好的软件包? - knocte
5
使用 pip install path-to-downloaded-package 安装已下载的软件包。 - Anton Khodak
8
几天前我尝试过这个,我认为它仍然试图从互联网检索依赖项而不是使用已下载的依赖包。如果我没记错的话,我必须使用命令 sudo pip install <path-to-downloaded-package> --no-index --find-links \pwd``。 - knocte
8
请注意,“pip download”也支持“-r requirements.txt”,因此您可以轻松地从连接到互联网的计算机下载所有内容,然后将其复制到离线计算机并按照上述评论者所述进行安装。 - Hawkins
7
可以使用pip download -d <目标目录> <包名>命令来将软件包下载到指定的目录中,所有依赖项也会一并下载。 - Vic
显示剩余2条评论

122

--download-cache选项应该可以满足你的需求:

pip install --download-cache="/pth/to/downloaded/files" package

然而,当我测试时,主要的软件包下载、保存和安装都没问题,但是依赖项的名称保存为其完整的 URL 路径 - 有点烦人,但所有的 tar.gz 文件都在那里。

--download 选项会下载主要的软件包及其依赖项,但不会安装它们。(请注意,在版本1.1之前,--download 选项不会下载依赖项。)

pip install package --download="/pth/to/downloaded/files"

pip文档概述了如何使用--download来进行快速和本地安装


5
不错,那确实起作用了 - 虽然我加了一个 --no-install 选项。你关于文件名有点奇怪的说法是对的,但至少文件在那里。 - John C
上次我检查的时候,--download选项会下载带有依赖关系的软件包。 - Mohammad Niknam
3
--download-cache已经被弃用,请使用pip install --download <dir> <pkg>。 (说明:该命令为Python中pip包管理工具的相关命令,意为使用指定目录<dir>来缓存安装包<pkg>) - ostler.c
26
现在已经弃用了 pip install --download 命令,并将在 pip 10 版本中删除。请使用 pip download somepackage 命令代替。具体信息可参考:https://pip.pypa.io/en/latest/reference/pip_download/#overview。 - Sнаđошƒаӽ
27
新的等效命令是 pip download -d <dir> { -r requirements.txt | <packagename> }。具体而言,该命令意为从 PyPI 下载指定软件包或在 requirements.txt 文件中列出的所有软件包,并将它们存储在指定目录 <dir> 中。 - rrauenza
显示剩余5条评论

72

我通常使用以下命令下载包:

pip install --download /path/to/download/to_packagename

或者

pip install --download=/path/to/packages/downloaded -r requirements.txt

当我想要安装我刚刚下载的所有库时,我会执行以下操作:

pip install --no-index --find-links="/path/to/downloaded/dependencies" packagename

或者

pip install --no-index --find-links="/path/to/downloaded/packages" -r requirements.txt


更新

另外,为了在另一个系统上安装所有软件包,您可以将它们全部导出到requirement.txt文件中,我们这样做:

pip freeze > requirement.txt

然后,requirement.txt文件可像上述下载一样使用,或者执行以下操作从requirement.txt文件中安装它们:

pip install -r requirement.txt

参考:pip installer


14

pip wheel是另一个您应考虑的选项:

pip wheel mypackage -w .\outputdir
它将下载软件包及其依赖项到一个目录中(默认情况下为当前工作目录),但它会执行额外的步骤,将任何源代码软件包转换为wheels格式。 它方便地支持需求文件:

它将下载软件包及其依赖项到一个目录中(默认情况下为当前工作目录),但它会执行额外的步骤,将任何源代码软件包转换为wheels格式。

它方便地支持需求文件:

pip wheel -r requirements.txt -w .\outputdir

如果你只想安装特定的软件包,可以添加--no-deps参数:

pip wheel mypackage -w .\outputdir --no-deps

当您需要同时下载和构建所需的轮子时,这是一个很好的选择。 - link_boy

11

使用pip download <package1 package2 package n>命令下载包及其依赖项

使用pip install --no-index --find-links . <package1 package2 package n> 命令安装包及其依赖项。 它会从当前工作目录 CWD 获取所有文件。 它不会下载任何内容。


9
在版本7.1.2中,pip会下载一个软件包的wheel文件(如果有的话),具体操作如下:
pip install package -d /path/to/downloaded/file

以下是源代码分发的下载链接:
pip install package -d /path/to/downloaded/file --no-binary :all:

如果pip已经知道依赖项(例如,pip show package 列出它们),则这些依赖项也将被下载。


更新

Anton Khodak所指出的那样,自版本8起,更喜欢使用 pip download 命令。在上面的示例中,这意味着需要使用选项 -d 给出已下载文件的路径 /path/to/downloaded/file,这样用 download 替换 install 即可。


我必须在Windows上进行开发,并在完全没有互联网连接的RH7上部署。因此,我使用--no-binary:all:下载源软件包。但是,当收集django-pyodbc-azure==2.0.4.1时,此方法会失败,因为该软件包没有源文件。是否有一种方法可以下载源码或者如果不存在,则下载weehl? - cwhisperer

4

安装 Python 包时离线操作

对于Windows 用户:

要将文件下载到本地,请打开cmd并执行以下命令:

cd <*你想要保存的文件路径*>

pip download <*包名*>

该包及其依赖项将会被下载到当前工作目录中。

要从当前工作目录安装

请将下载文件所在文件夹设为当前工作目录,然后按照以下步骤继续进行:

pip install <*以.whl格式下载的包名*> --no-index --find-links <*文件下载路径*>

这将在指定位置搜索依赖项。


2
如果您没有指定平台,它将下载当前操作系统的文件。因此,如果您在其他操作系统上安装已下载的文件,则无法正常工作。 - Prometheus

3
所有在此主题中提到的答案都假设软件包将在与目标操作系统相同的操作系统配置上下载并安装。
根据我的个人经验,我使用Windows作为工作机器,必须下载Linux环境的软件包,也见过其他人反过来做。我进行了一些广泛的谷歌搜索,并发现了sodim.dev
我所要做的就是上传requirements.txt文件并选择环境配置,如操作系统和Python版本,它会输出一个csv文件,其中包含下载URL、源代码URL等信息。
我猜测在后台,该应用程序按要求启动操作系统VM并安装特定的Python版本,然后生成报告,因为这需要大约15-20分钟来处理30-50个软件包。
附注:我在一个离线环境中工作,安全性非常高,下载软件包并不频繁。我们为每个单独的请求白名单源代码和下载URL,然后运行一些应用程序安全工具,批准/拒绝要下载的源代码。

0

我倾向于使用(RHEL) - pip download package==version --no-deps --no-binary=:all:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接