如何使用pip下载可用的Windows二进制文件以及所有其他源文件
问题内容:
我必须管理两个单独的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',
'download',
pkg,
'-d py_packages_20180222/']
subprocess.run(cmdalt)
问题答案:
不,根据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