如何使用pip下载可用的Windows二进制文件以及所有其他源文件

问题描述

不,根据pip文档,这样的选项不存在:

--only-binary <format_control>:请勿使用源程序包。可以多次提供,每次都增加到现有值。接受:all:禁用所有源软件包,:none:清空集合,或接受一个或多个软件包名称,并且它们之间用逗号分隔。如果没有二进制分发包,则在使用此选项时将无法安装。

您可以在一个小的脚本中用一个条件来达到预期的效果,也许是这样的(尽管这只是一个草图,但是我不是Python专家):

#!/usr/bin/env python3

import subprocess

cmd = ['pip3',
       'download',
       'ipython',
       '--platform',
       'win_amd64',
       '-d py_packages_20180222/',
       '--only-binary=:all:']

result = subprocess.run(cmd)
if result.returncode != 0:
    print("oh noes")
    # put here what should happen if the download of the binaries fails

解决方法

我必须管理两个单独的Python设置,一个在具有Internet连接的Linux机器上,一个在离线Windows机器上。对于给定的一组必需软件包,我想在Linux机器上下载必要的文件,将它们传输到Windows机器并在此处安装。

预期的工作如下:

pip3 download virtualenv --platform win_amd64 -d py_packages_20180222/ --only-binary=:all:

该文件virtualenv-15.1.0-py2.py3-none- any.whl将下载到所需位置,并准备传输。但是,如果pip找不到二进制文件,则会产生错误:

pip3 download ipython --platform win_amd64 -d py_packages_20180222/ --only-binary=:all:
 Could not find a version that satisfies the requirement simplegeneric>0.8 (from ipython) (from versions: )
No matching distribution found for simplegeneric>0.8 (from ipython)

由于设置--only- binary=:all:,这是预期的输出,但是这不是我想要的输出。在这种情况下,我想pip下载源代码(带有警告)并继续。我本质上是在寻找pip选择--only- binary=:if_available:。是否存在?

编辑: 不,不是。感谢接受的答案,我能够使用以下bash脚本找到解决方案:

#!/usr/bin/env python3

import subprocess

pkges = ['virtualenv','ipython']

for pkg in pkges:
    cmd = ['pip3','download',pkg,'--platform','win_amd64','-d py_packages_20180222/','--only-binary=:all:']

    result = subprocess.run(cmd)
    if result.returncode != 0:
        print("No binary found for pkg. Downlaoding source code instead")
        cmdalt = ['pip3','-d py_packages_20180222/']
        subprocess.run(cmdalt)