Python3.6.4下导入avro.schema失败问题求助
解决Debian 9 x64下Python 3.6.4 + avro-python3 1.8.x导入avro.schema失败的问题
我之前在Debian 9环境里用Python 3.6搭配avro-python3 1.8.x版本时,也碰到过完全一样的导入问题。从你给出的报错信息来看,导入avro本身没问题,但找不到avro.schema模块,说明你安装的avro包是空的命名空间,大概率是系统包和pip包的冲突导致的。下面是我亲测有效的解决步骤:
第一步:清理冲突的包
Debian 9默认的软件源里可能已经预装了python3-avro包,这个包的结构和pip安装的avro-python3不一致,会导致命名空间冲突。先卸载系统包和已有的pip包:
# 卸载系统级的avro包 sudo apt remove python3-avro -y # 卸载pip安装的avro相关包 pip3 uninstall avro avro-python3 -y
第二步:重新安装指定版本的avro-python3
确保用Python 3.6对应的pip来安装,避免安装到其他Python版本环境里:
# 检查pip3是否对应Python 3.6 pip3 --version # 如果输出里显示的是Python 3.6的路径,直接用下面的命令安装 pip3 install avro-python3==1.8.2 # 如果pip3对应其他版本,用Python 3.6的模块方式安装 python3.6 -m pip install avro-python3==1.8.2
第三步:验证导入
打开Python 3.6交互环境测试:
>>> import avro.schema >>> print(avro.schema) <module 'avro.schema' from '/usr/local/lib/python3.6/dist-packages/avro/schema.py'>
如果能正常输出模块路径,说明问题已经解决了。
为什么会出现这个问题?
- Debian 9的
python3-avro包是基于旧版avro构建的,它的模块结构和avro-python31.8.x不兼容,会覆盖pip安装的包的命名空间。 - 如果你的Python环境里同时存在多个Python版本,pip可能把包安装到了其他版本的路径下,导致Python 3.6找不到正确的模块。
内容的提问来源于stack exchange,提问作者droid192
相关产品推荐
相关产品推荐

