如何正确导入IbPy2和backtrader?附导入报错解决方案
问题根因
你安装的IbPy版本为Python2专属适配版本,报错行except (socket.error, ), ex:是Python2特有的异常捕获语法,Python3已移除该语法,统一使用as关键字绑定异常实例,因此在Python3.9环境下直接触发语法错误。backtrader导入阶段会自动扫描环境中已安装的IbPy组件并尝试加载IB经纪商模块,因此安装该不兼容版本的IbPy后,会连带导致backtrader导入失败。
可行解决方案
按推荐优先级排序:
- 方案1:替换为Python3兼容的IbPy发行版
先彻底卸载当前不兼容版本:
安装适配Python3的IbPy版本:pip uninstall -y IbPy IbPy2
安装完成后重新执行pip install ib-py3import backtrader即可验证修复效果,该版本兼容M1芯片Mac下的Anaconda Python3.9环境,可在JupyterLabs中正常调用。 - 方案2:无IB对接需求时直接卸载IbPy
如果你不需要使用backtrader对接盈透证券的实盘、模拟盘接口,直接卸载不兼容的IbPy即可恢复backtrader的正常导入:pip uninstall -y IbPy IbPy2 - 方案3:手动修改语法兼容(不推荐)
定位到报错提示路径下的ib/lib/__init__.py文件,找到第239行,将原代码:
修改为Python3兼容写法:except (socket.error, ), ex:
注意该Python2版本的IbPy中存在十余处同类语法差异,后续运行中还会触发其他兼容报错,需要逐一修正,因此不推荐使用该方案。except (socket.error,) as ex:
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

