为何在Amazon Linux中执行pip install futures会损坏pip?
解析pythonfutures在Amazon Linux上的异常问题
先给核心结论:pythonfutures是专为Python 2打造的concurrent.futures向后移植库,对于Python 3环境来说,这个包完全属于「不该碰」的范畴——毕竟Python 3.2及以上版本已经内置了原生的concurrent.futures模块,安装这个移植包只会引发模块冲突。
但有意思的是,这个冲突在Amazon Linux上的表现格外严重,在其他环境里可能只是个不起眼的警告,甚至完全没异常。
如何复现这个问题
你可以用Docker快速搭建环境复现:
docker run -it amazonlinux /bin/bash # 安装Python3.6和virtualenv bash-4.2# yum install -y python36-virtualenv > /dev/null # 创建虚拟环境 bash-4.2# virtualenv-3.6 ~/testenv # 激活虚拟环境 bash-4.2# source ~/testenv/bin/activate # 安装问题包 (testenv) bash-4.2# pip install futures # 尝试导入模块触发异常 (testenv) bash-4.2# python -c "import concurrent.futures"
之所以Amazon Linux上问题更突出,是因为它的Python 3.6环境中,系统自带的concurrent.futures模块结构和pythonfutures这个移植包的文件布局存在特殊冲突,导致导入时路径混乱,进而触发各种导入错误或功能异常。
解决办法
很简单:Python 3环境下绝对不要安装futures包(也就是pythonfutures),直接用系统内置的concurrent.futures就好。如果是依赖链不小心引入了这个包,直接执行pip uninstall futures移除,或者在requirements.txt里明确排除它。
内容的提问来源于stack exchange,提问作者Tony Kelman
相关产品推荐
相关产品推荐

