Anaconda环境下如何强制Python加载正确的brotli包?
强制Python加载Google Brotli包的解决方案
问题原因
brotlipy与Google官方的brotli包均提供了名为brotli的Python模块,而Anaconda环境中conda包的路径优先级默认高于pip包,因此Python会优先加载brotlipy的实现,导致调用新版本分块压缩API报错。
可行解决方法
1. 调整sys.path优先级
- 先通过
pip show brotli命令获取Google brotli包的安装路径,找到Location字段对应的目录,比如/your/anaconda/env/lib/python3.9/site-packages/brotli - 在代码的最开头添加以下代码,将Google brotli的路径插入到模块搜索路径的最前端:
import sys # 替换为实际的Google brotli路径 sys.path.insert(0, "/your/anaconda/env/lib/python3.9/site-packages/brotli") import brotli # 验证是否加载正确 print(brotli.__file__) # 输出应为Google brotli的路径,而非brotlipy的路径
2. 直接指定模块路径导入
如果调整sys.path无效,可以用importlib直接加载指定路径的brotli模块,同样放在代码最开头:
import importlib.util import sys # 替换为Google brotli包的__init__.py路径 brotli_path = "/your/anaconda/env/lib/python3.9/site-packages/brotli/__init__.py" spec = importlib.util.spec_from_file_location("brotli", brotli_path) brotli = importlib.util.module_from_spec(spec) sys.modules["brotli"] = brotli spec.loader.exec_module(brotli) # 验证 print(brotli.__file__)
3. 保留brotlipy的同时重命名Google brotli
如果需要同时保留两个包的调用,可以在安装时给Google brotli重命名:
- 先卸载已安装的brotli:
pip uninstall -y brotli - 克隆官方源码:
git clone https://github.com/google/brotli.git - 进入源码目录,修改
setup.py中的name字段为google-brotli,然后执行pip install . - 之后在代码中通过
import google_brotli as brotli来调用官方版本
内容的提问来源于stack exchange,提问作者FooBar
相关产品推荐
相关产品推荐

