身为本人, 实际测试过CentOS 7.9加上Python 3.9.18的环境, 踏过执行pip install后直接出现“ERROR: No matching distribution found”这样报错的坑, 对于新手而言, 依照下……
身为本人, 实际测试过CentOS 7.9加上Python 3.9.18的环境, 踏过执行pip install后直接出现“ERROR: No matching distribution found”这样报错的坑, 对于新手而言, 依照下面的步骤逐个进行操作, 便能够躲开这类常见的封装兼容性方面的问题。
第一步:确认封装名称与版本精确对应
运用 pip show 封装名 去查看已安装的版本, 或者直接前往 PyPI 官方仓库 搜索封装名称。
按照这样的操作路径来, 先进入终端, 接着输入pip index versions 封装名, 以此查看所有能够使用的版本列表, 着重去比对当下系统的Python版本号, 也就是3.9, 以及封装所支持的Python版本范围。
倘若碰到名称书写易混同的封装, 像Pillow与PIL这般, 必然得运用pip list | grep -i关键字, 先去筛查本地是不是有同名的封装。
【新手避坑】
最主要成因在于, 你所键入的被封装起来的名称, 存在大小写或者下划线方面的差错, 举例来说, 像是把beautifulsoup4写成了beautifulSoup4, 又好比版本号码写成了3.0.0, 然而实际上仅仅到2.9.1。
迅速的解决办法是, 前往PyPI.org复制官方名称, 不要手动输入;版本号要在pip index versions输出里选择最高的稳定版本, 避开alpha、beta后缀。
第二步:清理本地缓存并指定源重试
缓存污染常常导致旧版本包被反复尝试。
操作的路径是, 从终端开始, 接着执行pip cache purge来彻底地清除所有存放的缓存文件, 然后在重新进行安装之时添加 –no-cache-dir这个参数, 关于命令的示例是。
pip install --no-cache-dir 封装名==版本号 -i https://pypi.tuna.tsinghua.edu.cn/simple
这里清华源的延迟低、同步快,优先使用。
【新手避坑】
较为常见的报错情况是, 显露出WARNING: Retrying (Retry(total=4))…这样的提示, 之后出现超时进而导致失败。
根本缘由在于, 那设定的默认源即pypi.org, 在国内进行访问时速度迟缓, 又或者是你当下所处网络状况里, DNS解析出现了异常情况。
快速处理方式: 首先对 pypi.org 执行 ping 操作, 查看是否可连通, 要是不能连通就在其中更换为 -i https://mirrors.aliyun.com/pypi/simple/ ;倘若依旧是失败状况, 应当运用 –timeout=30 这个参数来延长所作的等待时长。
第三步:检查系统依赖库是否缺失
其操作所需遵循的路径是, 先进入终端, 接着输入python -c”import 封装名” 同时查看呈现出来的报错信息。要是出现提示libxxx.so.6: cannot open shared object file这种情形, 那就表明系统缺少必要的库文件。
以Pillow作为例子, 通过yum安装libjpeg – devel、zlib – devel、freetype – devel, 安装完成之后再次使用pip进行安装。
最为关键的参数, 其最优的推荐数值即为: –global-option=build_ext, –global-option=–with-jpeg, 此一参数能够强行使得pip当其处于编译阶段的时候启用JPEG的支持, 进而避免在安装了之后出现图片处理方面报错的情况。
【新手避坑】
常见出现的报错情况是, ImportError, 也就是libGL.so.1, 无法打开共享对象文件。
主要原因在于, opencv – python等这类封装, 是依赖libGL图形库的, 而进行最小化安装的CentOS, 其默认状态下是没有携带该库的。
办法解决快速是: 开展yum install mesa-libGL mesa-libGLU进行安装, 之后呢, 再开展pip install opencv-python-headless(此为无GUI版本, 其体积是越小的), 最终便达成一步搞定的结果。
两种实操方案对比:
方案A: 用pip install安装封装名, 此为纯净安装方式, 适用于官方源速度快, 并且封装不存在外部依赖的情况。
方案B: 通过pip install 封装名, 并且采用 –no-binary=:all: 的方式 , 这种方式是强制从源码进行编译 , 它适合在需要定制编译参数的情况下 , 或者官方wheel不具备你所需要的特性的时候使用。
判定选择的逻辑是, 在日常进行开发期间得运用方案A, 它具备速度快以及操作省事的特点 ;而当遭遇系统库有所缺失, 并且有必要开启如 –with-yuv 这般, 属于特殊那一类的编译选项之际, 才会去借助方案B。方案B所耗费的时间比较长, 对于新晋加入的人员而言, 要谨慎地使用。
一个高频完整报错+完整一站式解决流程:
报错的信息是, ERROR, 出现了这样的情况, 无法成功构建用于cryptography的轮子, 再加上openssl/opensslv.h这个文件不存在, 显示没有这样一个文件或者目录。
解决流程:
第一步, 执行yum install openssl – devel动作, 此动作是用来获取, 亦或是说安装openssl开发头文件。
② 使用pip以不缓存目录的方式重新安装cryptography, 在这个时候pip会从源码进行编译。
③ 编译的时候大概需要三到五分钟, 要是中途在running build_ext这个阶段卡住了, 那就按Ctrl+C停止, 接着去执行出口的CFLAGS等于“-I/usr/include/openssl”并且设置成环境变量, 随后再重新尝试第二步。
第四步, 在安装成功之后, 运行这样的命令, 即python -c”from cryptography.fernet import Fernet; print(Fernet.generate_key())”然后对结果进行验证, 确保没有报错。
不适用于本方法的场景是: 当封装自身为纯Python包, 不存在外部C依赖时, 无需进行第三步, 或者倘若你所使用的是Windows系统且版本差异显著, 像是Python 3.12这种情况, 上述yum命令不产生作用。对Windows用户而言, 替代方案是, 在直接去pip install之前, 先去确认Python版本处于3.8至3.11之间, 通过使用python -m pip install来确保路径正确, 或者借助conda install依赖Anaconda的预编译包, 以此省去编译环节。
微信扫一扫
还没有评论呢,快来抢沙发~