离线安装python包,遇到is not a supported wheel on this platform

背景

没有外网的情况下,需要安装python的第三方依赖包。先使用pip下载了安装包,然后上传到需要安装第三方包的机器中去,结果安装的时候出现了“is not a supported wheel on this platform”,机器的版本是python3.7,win64,而安装的包为cp36的。

首先想到的是,先想办法找到最新的包为cp37的,但是发现最新的包只有cp36的,然后想到的方式,降python的版本,但立马把这个方案否定了。最后通过修改包名称解决问题。

过程

下载
这里是需要离线安装paramiko,首先在有外网的机器中,新建文件夹,进入文件夹后,进入cmd命令行模式,输入以下命令下载包

python -m pip download paramiko

下载成功后,本地会出现多个的.whl文件,在命令中,输入以下命令,将文件名称写入到文件中

dir /b > requirements.txt

这时,会自动新建requirements.txt文件,且包含各个.whl文件名,打开文件,去除名称“requirements.txt”

cffi-1.15.1-cp37-cp37m-win_amd64.whl
cryptography-38.0.1-cp36-abi3-win_amd64.whl
paramiko-2.1.6-py2.py3-none-any.whl
pyasn1-0.4.8-py2.py3-none-any.whl
pycparser-2.21-py2.py3-none-any.whl

然后上传至需要安装的机器

安装
进入对应目录,打开命令行,执行以下命令

python -m pip install --no-index --find-link=./ -r requirements.txt

如果版本对上的话,正常是能够安装完成的,但是此时出现报错
ERROR:xxx.whl is not a supported wheel on this platform
比如安装cryptography-38.0.1-cp36-abi3-win_amd64.whl

解决思路

按照网上的方式,先查看机器的python支持版本,命令如下

# 1、win32常用:
import pip;
print(pip.pep425tags.get_supported())

# 2、amd64常用:
import pip._internal
print(pip._internal.pep425tags.get_supported())
# 或
import pip._internal.pep425tags
# 或
import wheel.pep425tags as w

# 3、如果还是不行,用以下命令在CMD执行:
python -m pip debug --verbose

可以查看类似“cp37-cp37m-win_amd64”这样的信息,主要包括3块,cp37、cp37m、win_amd64

正常情况下,只要再去下载cp37对应的版本即可,然而我遇到了没有cp37的版本,最新的只有cp36的版本,那要如何做呢?

很简单的方式,将cryptography-38.0.1-cp36-abi3-win_amd64.whl,直接将文件名中的cp36改成cp37即可,然后继续安装,但还是出现了同样的问题,这时可以将abi3改成none即可,最终改成cryptography-38.0.1-cp37-none-win_amd64.whl,这时再去安装就能安装成功了。

思考
pip的第三方包很不可思议,可以直接修改包的版本,然后就能安装成功,主要涉及三个(cp37, none, any),支持这种方式来修改,也就是将cp36改成cp37,abi3改成none,如果还不行,可以将win_amd64改成any

到此,按照上边的方式,就可以安装成功了

你可能感兴趣的:(Python,python,开发语言)