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

Sas*_*ibe 5 python pip

我必须管理两个独立的 Python 设置,一个位于具有互联网连接的 Linux 计算机上,另一个位于离线 Windows 计算机上。对于给定的一组所需软件包,我想在 Linux 计算机上下载必要的文件,将它们传输到 Windows 计算机并安装在那里。

以下内容按预期工作:

pip3 download virtualenv --platform win_amd64 -d py_packages_20180222/ --only-binary=:all:
Run Code Online (Sandbox Code Playgroud)

文件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)
Run Code Online (Sandbox Code Playgroud)

这是由于设置而产生的预期输出--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',
                  'download',
                  pkg,
                  '-d py_packages_20180222/']
        subprocess.run(cmdalt)
Run Code Online (Sandbox Code Playgroud)

ano*_*ode 2

不,根据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
Run Code Online (Sandbox Code Playgroud)