AlmaLinux 8安装pyvmomi 7.0.3/8.0.2报错求助
Python安装pyvmomi报错的解决方法
问题描述
在全新安装的AlmaLinux 8机器上,已安装python3、python3-pip及相关依赖,执行pip3 install ./pyvmomi-7.0.3.tar.gz安装pyvmomi 7.0.3或8.0.2版本时,出现以下报错:
Processing ./pyvmomi-7.0.3.tar.gz Exception: Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/pip/utils/__init__.py", line 565, in untar_file tarfile.data_filter(member.replace(name=fn), location) AttributeError: module 'tarfile' has no attribute 'data_filter' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/pip/basecommand.py", line 215, in main status = self.run(options, args) File "/usr/lib/python3.6/site-packages/pip/commands/install.py", line 346, in run requirement_set.prepare_files(finder) File "/usr/lib/python3.6/site-packages/pip/req/req_set.py", line 381, in prepare_files ignore_dependencies=self.ignore_dependencies)) File "/usr/lib/python3.6/site-packages/pip/req/req_set.py", line 623, in _prepare_file session=self.session, hashes=hashes) File "/usr/lib/python3.6/site-packages/pip/download.py", line 810, in unpack_url unpack_file_url(link, location, download_dir, hashes=hashes) File "/usr/lib/python3.6/site-packages/pip/download.py", line 716, in unpack_file_url unpack_file(from_path, location, content_type, link) File "/usr/lib/python3.6/site-packages/pip/utils/__init__.py", line 622, in unpack_file untar_file(filename, location) File "/usr/lib/python3.6/site-packages/pip/utils/__init__.py", line 566, in untar_file except tarfile.LinkOutsideDestinationError: AttributeError: module 'tarfile' has no attribute 'LinkOutsideDestinationError'
疑问:是否缺少依赖包?如何从报错中判断缺失的包?使用本地仓库,需在其他机器下载最新版本后同步到本地仓库。
原因分析
不是缺少依赖包,核心问题是pip版本与Python版本不兼容:
tarfile.data_filter和tarfile.LinkOutsideDestinationError是Python 3.10及以上版本才新增的特性- 当前系统使用Python 3.6,但安装的pip版本过高,新pip会调用这些高版本Python专属的tarfile属性,导致触发AttributeError报错
解决步骤
1. 降级pip到适配Python 3.6的版本
执行以下命令,将pip降级到最后支持Python 3.6的版本:
pip3 install pip==20.3.4
2. 重新安装pyvmomi
使用降级后的pip执行本地安装命令:
pip3 install ./pyvmomi-7.0.3.tar.gz
本地仓库同步方法
在有网络的机器上(需确保Python版本匹配,或使用对应适配版本的pip):
- 下载pyvmomi 7.0.3及其所有依赖包到指定目录:
pip3 download pyvmomi==7.0.3 --dest ./pyvmomi-packages - 将下载好的所有
.tar.gz或.whl包同步到本地仓库目录 - 在目标AlmaLinux 8机器上,通过本地仓库安装:
pip3 install ./pyvmomi-7.0.3.tar.gz --find-links /path/to/your/local/repo
报错判断技巧
- 若报错为
AttributeError: module 'xxx' has no attribute 'yyy':说明当前Python版本不支持该属性,大概率是工具(如pip)版本过高,与Python版本不兼容,而非缺少依赖包 - 若报错为
ImportError: No module named 'xxx'或PackageNotFoundError:才是明确提示缺少对应依赖包的信号
内容的提问来源于stack exchange,提问作者SHLelieveld
相关产品推荐
相关产品推荐

