安装 alphatrade 时 protlib 构建失败并提示 use_2to3 无效,如何解决?
报错的直接原因是 protlib 的构建配置使用了 use_2to3,而执行构建的 setuptools 不接受这个选项。针对日志中的 Python 3.9 环境,可以先在独立虚拟环境中安装旧版构建工具,使用 --no-build-isolation 安装 protlib,再安装 alphatrade。
为什么已有 setuptools 57.5.0 仍然报错?
setuptools 从 58.0.0 起移除了构建期间的 2to3 支持,因此旧包中的 use_2to3 配置会触发兼容性错误。这项变更记录在 setuptools 官方发布历史中。
日志中的两处路径解释了为什么当前环境里的旧版本没有解决问题:
./Library/Python/3.9/lib/python/site-packages:当前用户环境,已安装setuptools==57.5.0。/private/var/folders/.../pip-build-env-.../overlay/...:pip 为源码包创建的临时构建环境。
pip 默认会隔离源码包的构建依赖,所以当前环境安装的版本不一定会用于临时构建环境。日志没有列出临时环境中 setuptools 的具体版本,但报错与新版构建工具不再支持 use_2to3 的情况一致。pip 构建系统文档说明了这一隔离机制。
单独执行普通的 pip install protlib 仍会经过相同的构建流程,也可能再次报错。
安装步骤
以下步骤以日志中的 Python 3.9 为前提。如果系统中没有 python3.9 命令,需要先确认该解释器的实际路径。
1. 创建并激活虚拟环境
python3.9 -m venv .venv-alphatrade
source .venv-alphatrade/bin/activate
python --version
python -m pip --version
确认 Python 版本,并检查 pip 路径是否指向这个虚拟环境。原描述同时提到 MacBook 和 Ubuntu,日志路径则更像 macOS;应以实际运行命令的系统和解释器为准。
2. 准备兼容旧包的构建工具
可以先用下面这组旧版工具处理构建问题:
python -m pip install "setuptools==57.5.0" "wheel==0.37.1"
这里将 setuptools 固定为日志中 alphatrade 要求的版本,并安装旧版 wheel。这种兼容处理针对 Python 3.9 和旧依赖,不代表适用于任意 Python 版本。
3. 关闭构建隔离,先安装 protlib
python -m pip install --no-build-isolation "protlib==1.5.0"
--no-build-isolation 让本次构建使用当前虚拟环境中准备好的工具。使用这个选项时,需要自行安装构建依赖,pip 不会代为管理。详见 pip 参数说明。
安装成功后,再安装日志中对应的 alphatrade 版本:
python -m pip install "alphatrade==1.0.0"
python -m pip check
pip check 用于检查已安装包的依赖关系,不能替代实际运行验证。以上命令针对当前构建错误,不保证后续不会出现其他依赖或运行时兼容性问题。
如果仍然失败,检查什么?
先确认命令使用的是同一个环境:
python -m pip show setuptools wheel
python -m pip install -v --no-build-isolation "protlib==1.5.0"
如果仍出现 use_2to3 is invalid,检查 setuptools 是否确实为 57.5.0,以及安装命令是否带有 --no-build-isolation。如果错误内容已经改变,应根据新的首个致命错误继续排查。
日志中的 Unknown distribution option: 'test_suite' 是警告,紧随其后的 use_2to3 is invalid 才是本次失败的关键。Defaulting to user installation 只是安装位置提示,没有证据表明这次失败需要通过 sudo 或修改目录权限解决。
长期维护时,应评估可用的更新版本或修复旧包的构建流程。直接删除 use_2to3 可能跳过必要的 Python 2 到 Python 3 代码转换,必须结合源码和测试判断。
备注:内容仅供参考。
