背景
一切的一切源于那万恶的CV2 not find DLL!!!
找遍千山万水,发现是py版本和opencv版本不匹配导致的
遂花了一些时间,写了如下php
原理:
去pypi找编译后的whl文件,有编译就是官方有适配,逆序取出最大版本号
<?php
require "simple_html_dom.php";
$name = isset($_GET['name']) ? $_GET['name'] : null; //项目名
$version = isset($_GET['v']) ? $_GET['v'] : null; //py版本
$machine = isset($_GET['m']) ? $_GET['m'] : null; //设备名称
if (!$name && !$version && !$machine) {
$msg="用法:</br>pypi.php?name=opencv-contrib-python&v=38&m=win_amd64</br></br>v为Py版本号</br>例如</br>310 39 38 37 27</br></br>m为设备名</br>例如</br>win32 win_amd64 linux macosx</br></br>成功返回pip命令:</br>例如</br>pip install opencv-contrib-python==4.5.4.60";
} elseif (!$name) {
$msg="name(模块名)不能为空!";
} elseif (!$version) {
$msg="v(Py版本号)不能为空!";
} elseif (!$machine) {
$msg="m(设备名)不能为空!";
} else {
$msg=check_version($name, $version, $machine);
}
echo $msg;
function check_version($name, $version, $machine)
{
$html= file_get_html("http://mirrors.aliyun.com/pypi/simple/".$name);
$rs = $html->find('a');
for ($i=count($rs)-1; $i > 0; $i--) {
$t = $rs[$i]->innertext();
if (stripos($t, "cp".$version) && stripos($t, $machine)) {
preg_match_all('#-([\d.]+)-cp'.$version.'#', $t, $match);
if ($match[1][0]) {
return "pip install ".$name."==".$match[1][0];
}
}
}
return "pypi上没有找到适合Py".$version."的".$name."版本";
}
具体用法如下
pypi.php?name=opencv-contrib-python&v=38&m=win_amd64
v为Py版本号
python版本 | v |
py3.10.xxx | 310 |
py3.9.xxx | 39 |
py3.8.xxx | 38 |
py3.7.xxx | 37 |
py2.7.xxx | 27 |
m为设备名
m |
win32 |
win_amd64 |
linux |
macosx |
成功返回pip命令:
pip install opencv-contrib-python==4.5.4.60