如何使用 Python 的 pip 来下载和保存包的压缩文件?

如果我想使用 pip命令下载一个包(及其依赖项) ,但是 留着下载的所有压缩文件(比如 django-socialregistration.tar.gz)——有办法做到吗?

我已经尝试了各种命令行选项,但它似乎总是解压缩和 删除的 zipfile-或它得到的 zipfile,但 只有的原始包,而不是依赖关系。

194130 次浏览

--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作为 快速及本地安装

我总是这样下载软件包:

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

参考文献: 管道安装器

在7.1.2版本中,pip 下载包的轮子(如果有的话) ,其中包含以下内容:

pip install package -d /path/to/downloaded/file

下面下载源发行版:

pip install package -d /path/to/downloaded/file --no-binary :all:

如果 pip 知道这些依赖关系(例如,如果 pip show package列出了它们) ,它们也会下载这些依赖关系。


更新

正如 安东 · 霍达克所指出的,自从版本8以来,pip download命令是首选命令。在上面的例子中,这意味着需要用选项 -d给出 /path/to/downloaded/file,因此用 download代替 install是可行的。

不推荐使用 pip install --download。从8.0.0版本开始,您应该使用 pip download命令:

 pip download <package-name>

使用 pip download <package1 package2 package n>下载包括依赖项在内的所有包

使用 pip install --no-index --find-links . <package1 package2 package n>安装包括依赖项在内的所有包。 它从 CWD获取所有文件。 它不会下载任何东西

pip wheel 是另一个你应该考虑的选择:

pip wheel mypackage -w .\outputdir

它会将软件包及其依赖项下载到一个目录(默认情况下是当前工作目录) ,但是它会执行额外的步骤,将任何源软件包转换成车轮。

它方便地支持需求文件:

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

如果只需要特定请求的包,则添加 --no-deps参数:

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

离线安装 python 包

对于 窗户用户:

下载转换为文件 打开你的 Cmd然后跟着这个:

cd <*the file-path where you want to save it*>

pip download <*package name*>

软件包和依赖项将在当前工作目录下载。

从现在的工作目录到 安装:

设置您下载的文件夹为 cwd,然后按照以下步骤操作:

pip install <*the package name which is downloded as .whl*> --no-index --find-links <*the file locaation where the files are downloaded*>

这将搜索该位置中的依赖项。

我更喜欢(RHEL)-pip download package==version --no-deps --no-binary=:all:

在这个线程中提到的所有答案都假设这些软件包将在必须安装它的目标操作系统的相同操作系统配置上下载。

根据我个人的经验,我使用 windows 作为我的工作机器,必须下载 linux 环境的软件包,我看到人们也是这样做的。我做了一些广泛的谷歌,找到了 sodim.dev

我所要做的就是上传 requments.txt 文件,然后选择像 OS 和 python 版本这样的环境配置,它会给出一个带有下载地址、源代码地址等的 csv

我猜测在后端这个应用程序旋转操作系统虚拟机,并安装特定的 python 版本,然后生成报告,因为它确实需要大约15-20分钟的30-50个包。

附注: 我的工作环境是离线的,安全性非常重要,下载软件包的频率也不高。我们将源代码列入白名单,并为每个单独的请求下载 URL,然后在运行一些 appsec 工具之后,我们批准/拒绝要下载的源代码。