错误介绍
今天在使用宝塔阿里云OSS插件(免费)进行对网站自动备份的配置的时候,出现了这个错误,自己先各种折腾(升级宝塔/修复宝塔/升级插件/降级插件)依然无效。网上一通找,给出的方法统统无效。
官方论坛中也有人提问过,看评论出现的人也不是很少(类型帖子或者错误有好几个…)…
帖子给出的方法是
重新获取新的面板环境和更新包
curl http://download.bt.cn/install/update_panel.sh|bash
我使用后并没有任何效果…
解决建议
如果你出现相同的问题,建议你先使用:
curl http://download.bt.cn/install/update_panel.sh|bash
可能对你有效,可以先尝试,毕竟是官方回复,也有评论表示根据里面的方法是成功的。
如果不行再使用我下面的给出的解决方法,查看完解决方法后,不着急先执行,建议你先看解决须知。
下面我贴一下宝塔论坛里面的链接,感兴趣可以自己访问查看,
宝塔论坛文章
https://www.bt.cn/bbs/thread-125719-1-1.html
https://www.bt.cn/bbs/thread-127199-1-1.html
https://www.bt.cn/bbs/thread-113949-1-1.html
错误日志信息
Traceback (most recent call last):
File "class/CloudStoraUpload.py", line 144, in __init__
from alioss_main import OSSClient as oc
File "/www/server/panel/plugin/alioss/alioss_main.py", line 27, in <module>
import oss2
File "/www/server/panel/pyenv/lib/python3.7/site-packages/oss2/__init__.py", line 15, in <module>
from .resumable import resumable_upload, resumable_download, ResumableStore, ResumableDownloadStore, determine_part_size
File "/www/server/panel/pyenv/lib/python3.7/site-packages/oss2/resumable.py", line 19, in <module>
from .crypto_bucket import CryptoBucket
File "/www/server/panel/pyenv/lib/python3.7/site-packages/oss2/crypto_bucket.py", line 10, in <module>
from .crypto import BaseCryptoProvider
File "/www/server/panel/pyenv/lib/python3.7/site-packages/oss2/crypto.py", line 21, in <module>
from aliyunsdkcore import client
File "/www/server/panel/pyenv/lib/python3.7/site-packages/aliyunsdkcore/client.py", line 31, in <module>
from aliyunsdkcore.vendored.requests import codes
File "/www/server/panel/pyenv/lib/python3.7/site-packages/aliyunsdkcore/vendored/requests/__init__.py", line 48, in <module>
from .packages.urllib3.contrib import pyopenssl
File "/www/server/panel/pyenv/lib/python3.7/site-packages/aliyunsdkcore/vendored/requests/packages/urllib3/contrib/pyopenssl.py", line 46, in <module>
import OpenSSL.SSL
File "/www/server/panel/pyenv/lib/python3.7/site-packages/OpenSSL/__init__.py", line 8, in <module>
from OpenSSL import SSL, crypto
File "/www/server/panel/pyenv/lib/python3.7/site-packages/OpenSSL/SSL.py", line 35, in <module>
from OpenSSL.crypto import (
File "/www/server/panel/pyenv/lib/python3.7/site-packages/OpenSSL/crypto.py", line 971, in <module>
name="X509Extension",
TypeError: deprecated() got an unexpected keyword argument 'name'
|-链接云存储失败,请检查配置是否正确!
错误日志截图
尽管提示:链接云存储失败,请检查配置是否正确!但是实际配置是正确的。
如果你在使用较低版本的OSS插件,可能可以在软件商店的时候访问打开这个插件进行配置,并访问OSS Bucket的目录,但是备份的时候会触发错误,如果升级到6.8版本,可能直接打开这个插件就报错了…
解决过程
一通折腾都没有效果后,我自己根据错误信息开始处理,
错误分析
日志显示了一个TypeError,说deprecated()函数收到了一个意外的关键字参数’name’。
这个情况一般是版本不兼容引起的,。
通过追踪的信息,我们可以看到,这个错误最初是从OpenSSL库中的crypto.py文件中引发的。具体来说,是在初始化X509Extension时调用了deprecated()函数,而这个函数并不支持传入name这个参数。
可能原因
你当前使用的OpenSSL库版本可能与其他依赖库(如aliyunsdkcore或requests)不兼容。在更新或更改某个库后,可能导致了这种不匹配。
得到了原因后,我先切入到宝塔所用的虚拟环境
source /www/server/panel/pyenv/bin/activate
然后查看了当前pyOpenSSL的版本,
pip show pyOpenSSL
我以为是pyOpenSSL这玩意版本太高了…想着先弄个低版本的试试,就去pyOpenSSL官网找了个低版本的版本号先装下看看。
问题真正原因
一装,就找到真正的原因所在了:
原来是:aliyun-python-sdk-core 2.13.30要求cryptography库的版本必须在>=2.9.2, <3.3之间。然而,当前安装的是cryptography 38.0.4,这就导致了不兼容。
确认问题
所以,如果你也出现了相同的问题,根据宝塔人员回复的内容又无法解决,就可以先看下自己几个模块的版本,看下它们的版本号,是否和我的情况类似:
pip show pyOpenSSL
pip show cryptography
pip show aliyunsdkcore
开始解决
卸载当前版本的cryptography
:
pip uninstall cryptography
安装兼容版本的cryptography
:
接着,安装一个与aliyun-python-sdk-core
兼容的版本,比如cryptography 3.2.1
(你也可以自己选择其他<3.3
且在>=2.9.2
范围内的一个版本):
pip install cryptography==3.2.1
当你在安装低版本的 时候,还会遇见一个依赖冲突问题,就是pyOpenSSL依赖的cryptography版本可能是比较高的版本。
这个时候你只需要卸载掉你当前的pyOpenSSL,安装依赖要求只需要cryptography 3.2.1
版本的pyOpenSSL即可。
pip uninstall pyOpenSSL
cryptography==3.2.1的版本,我去pyOpenSSL官方文档看了,pyOpenSSL==20.0.1版本是支持的,我就安装了pyOpenSSL==20.0.1版本,安装完成,再去备份,就成功了,问题解决。
pip install pyOpenSSL==20.0.1
数据备份运行成功截图
解决须知
我升级/修复了宝塔面板和OSS插件,以及使用了:
curl http://download.bt.cn/install/update_panel.sh|bash
手动更新面板环境等操作,理论来说,当前的环境应该是最合适宝塔的,使用上述的解决方法修改了pyOpenSSL和cryptography的版本,尽管未出现依赖冲突、不兼容的报错,但是也有可能会出现一些未知的问题。
可能出现错误解决
安装cryptography报错解决
安装cryptography==3.2.1的过程中,你可以会出现类似的错误,
Looking in indexes: https://mirrors.tencent.com/pypi/simple
Requirement already satisfied: cryptography==3.2.1 in /www/server/panel/pyenv/lib/python3.7/site-packages (3.2.1)
ERROR: Could not install packages due to an EnvironmentError: [Errno 2] No such file or directory: '/www/server/panel/pyenv/lib/python3.7/site-packages/cryptography-3.2.1.dist-info/METADATA'
遇到这个错误通常是由于cryptography
库的目录或安装文件损坏导致的。pip
在尝试访问某个文件时遇到了No such file or directory
的错误。
解决步骤
下面是几个有效的步骤来解决这个问题:
彻底卸载cryptography
:
首先,你需要尝试彻底卸载cryptography
库,包括可能存在的残留文件:
pip uninstall cryptography
如果卸载过程中还有错误,尝试强制卸载:
pip uninstall -y cryptography
因为我们之前已经卸载过了,运行上述命令出现错误不管它,继续往下看:
检查并删除残留文件:
确认cryptography
相关的文件夹已被删除。使用以下命令手动检查并删除可能还残留的文件:
rm -rf /www/server/panel/pyenv/lib/python3.7/site-packages/cryptography*
注意替换为你宝塔自己实际的环境路径
清理pip的缓存:
清理pip
的缓存,确保后续安装不使用缓存的损坏文件:
pip cache purge
重新安装cryptography
:
pip install cryptography==3.2.1
运行后出现:Successfully installed cryptography-3.2.1没报错即代表安装成功了。
下面一步可以忽略。
检查安装后的结果:
安装完成后,使用pip show命令查看版本来确认验证是否成功安装:
pip show cryptography
相关资料
pyOpenSSL官网
每个版本的changelog页面可以看见对应要求的cryptography版本