背景:现如今,在跑神经网络的时候,需要配置一些开源项目从而需要指定一些特定环境是必不可少的一个步骤,但是很多时候使用pip安装包的时候,总是找不到需要的版本。比如,今天需要配置open3d 0.15.1版本的环境,但是直接使用pip install open3d== 0.15.1固定版本下载不好使(conda install open3d == 0.15.1一样),pip显示只搜索到了如下图几个版本(pip搜索可可以安装的版本可以使用 pip install open3d== 语句,原理是故意让pip报错,然后列出可以安装的版本)。
但是open3d的官网显示最新的版本都到了0.17.0了。
现在总结一下,常用的几种下载指定包的手段。(重点是最后一个方法!)
下载安装包常规的几种思路
以open3d为例
1.指定版本下载
pip install open3d==0.15.1
2.下载包的对应官网源码,离线安装
比如去open3d里,下载0.15.1的版本,然后放在需要配置的环境,使用源码安装的方式安装。
3.whl文件安装
pip官网有对应包各种历史版本的包,找到对应版本的whl文件然后安装即可。
whl格式本质上是一个压缩包,里面包含了py文件,以及经过编译的pyd文件。使得可以在不具备编译环境的情况下,选择合适自己的python环境进行安装。
安装方法很简单,进入命令行输入
pip install xxxx.whl
3.1 如何找到所需要包对应版本的whl?
以open3d 0.15.1版本为例。
3.1.1 首先进入pip官网
3.1.2 在搜索栏,搜索open3d的包,然后点击进入寻找所需要的版本
注意,搜索出来的,只显示open3d的最新版本,如图,想要找低版本的open3d需要进去切换,如图。
3.1.3 切换版本后,选择对应的平台,然后下载whl文件,放入对应环境pip install xx.whl安装即可。
3.2 在安装whl时,大概率会报错(is not a supported wheel on this platform),使用如下方案解决
参考文章:https://blog.csdn.net/happywlg123/article/details/107281936
报错的主要问题是:下载的whl文件名称命名与pip能安装的whl不匹配造成的原因
解决办法:
直接在命令行中输入:pip debug --verbose
输入这个命令后,会输出大量信息:
pip version: pip 20.1.1 from /home/pi/Softwares/venv3/lib/python3.7/site-packages/pip (python 3.7)
sys.version: 3.7.3 (default, Dec 20 2019, 18:57:59)
[GCC 8.3.0]
sys.executable: /home/pi/Softwares/venv3/bin/python
sys.getdefaultencoding: utf-8
sys.getfilesystemencoding: utf-8
locale.getpreferredencoding: UTF-8
sys.platform: linux
sys.implementation:
name: cpython
‘cert’ config value: global
REQUESTS_CA_BUNDLE: None
CURL_CA_BUNDLE: None
pip._vendor.certifi.where(): /home/pi/Softwares/venv3/lib/python3.7/site-packages/pip/_vendor/certifi/cacert.pem
pip._vendor.DEBUNDLED: False
vendored library versions:
appdirs1.4.3
CacheControl0.12.6
colorama0.4.3
contextlib20.6.0.post1 (Unable to locate actual module version, using vendor.txt specified version)
distlib0.3.0
distro1.5.0 (Unable to locate actual module version, using vendor.txt specified version)
html5lib1.0.1
ipaddress1.0.23
msgpack1.0.0 (Unable to locate actual module version, using vendor.txt specified version)
packaging20.3
pep5170.8.2
progress1.5
pyparsing2.4.7
requests2.23.0
certifi2020.04.05.1
chardet3.0.4
idna2.9
urllib31.25.8
resolvelib0.3.0
retrying1.3.3 (Unable to locate actual module version, using vendor.txt specified version)
setuptools44.0.0 (Unable to locate actual module version, using vendor.txt specified version)
six1.14.0
toml0.10.0
webencodings0.5.1 (Unable to locate actual module version, using vendor.txt specified version)
Compatible tags: 44
cp37-cp37m-manylinux2014_armv7l
cp37-cp37m-linux_armv7l
cp37-abi3-manylinux2014_armv7l
cp37-abi3-linux_armv7l
cp37-none-manylinux2014_armv7l
cp37-none-linux_armv7l
cp36-abi3-manylinux2014_armv7l
cp36-abi3-linux_armv7l
cp35-abi3-manylinux2014_armv7l
cp35-abi3-linux_armv7l
cp34-abi3-manylinux2014_armv7l
cp34-abi3-linux_armv7l
cp33-abi3-manylinux2014_armv7l
cp33-abi3-linux_armv7l
cp32-abi3-manylinux2014_armv7l
cp32-abi3-linux_armv7l
py37-none-manylinux2014_armv7l
py37-none-linux_armv7l
py3-none-manylinux2014_armv7l
py3-none-linux_armv7l
py36-none-manylinux2014_armv7l
py36-none-linux_armv7l
py35-none-manylinux2014_armv7l
py35-none-linux_armv7l
py34-none-manylinux2014_armv7l
py34-none-linux_armv7l
py33-none-manylinux2014_armv7l
py33-none-linux_armv7l
py32-none-manylinux2014_armv7l
py32-none-linux_armv7l
py31-none-manylinux2014_armv7l
py31-none-linux_armv7l
py30-none-manylinux2014_armv7l
py30-none-linux_armv7l
cp37-none-any
py37-none-any
py3-none-any
py36-none-any
py35-none-any
py34-none-any
py33-none-any
py32-none-any
py31-none-any
py30-none-any
从中我们可以看到Compatible tags字样,这些就是当前Python版本可以适配的标签。例如,我的Python版本是3.7.3,可以匹配下面这些文件名:
Compatible tags: 44
cp37-cp37m-manylinux2014_armv7l
cp37-cp37m-linux_armv7l
cp37-abi3-manylinux2014_armv7l
cp37-abi3-linux_armv7l
cp37-none-manylinux2014_armv7l
cp37-none-linux_armv7l
cp36-abi3-manylinux2014_armv7l
cp36-abi3-linux_armv7l
cp35-abi3-manylinux2014_armv7l
cp35-abi3-linux_armv7l
cp34-abi3-manylinux2014_armv7l
cp34-abi3-linux_armv7l
cp33-abi3-manylinux2014_armv7l
cp33-abi3-linux_armv7l
cp32-abi3-manylinux2014_armv7l
cp32-abi3-linux_armv7l
py37-none-manylinux2014_armv7l
py37-none-linux_armv7l
py3-none-manylinux2014_armv7l
py3-none-linux_armv7l
py36-none-manylinux2014_armv7l
py36-none-linux_armv7l
py35-none-manylinux2014_armv7l
py35-none-linux_armv7l
py34-none-manylinux2014_armv7l
py34-none-linux_armv7l
py33-none-manylinux2014_armv7l
py33-none-linux_armv7l
py32-none-manylinux2014_armv7l
py32-none-linux_armv7l
py31-none-manylinux2014_armv7l
py31-none-linux_armv7l
py30-none-manylinux2014_armv7l
py30-none-linux_armv7l
cp37-none-any
py37-none-any
py3-none-any
py36-none-any
py35-none-any
py34-none-any
py33-none-any
py32-none-any
py31-none-any
py30-none-any
综上,把xx.whl文件,改成上述其中某个可以匹配的文件名即可。
例如:open3d-0.15.1-cp39-cp39-manylinux2014_aarch64.whl改为open3d-0.15.1-cp37-cp37m-manylinux2014_armv7l.whl即可