安装MobSF时执行pip install -r requirements.txt耗时过长求助
问题
在Linux(WSL)命令行中安装MobSF时,执行pip install -r requirements.txt命令,每个包都需要花费大量时间确定与其他依赖兼容的版本。当前pip版本为22.0.2,requirements.txt内容如下:
Django>=3.1.5 lxml>=4.6.2 rsa>=4.7 biplist>=1.0.3 requests>=2.25.1 bs4>=0.0.1 colorlog>=4.7.2 macholib>=1.14 whitenoise>=5.2.0 waitress>=1.4.4;platform_system=='Windows' gunicorn>=20.0.4;platform_system!='Windows' psutil>=5.8.0 shelljob>=0.6.2 asn1crypto>=1.4.0 oscrypto>=1.2.1 distro>=1.5.0 IP2Location==8.9.0 lief>=0.12.1 http-tools>=2.1.1 libsast>=1.5.1 pdfkit>=0.6.1 google-play-scraper>=0.1.2 androguard==3.4.0a1 apkid==2.1.4 quark-engine==22.10.1 frida==15.2.2 tldextract==3.4.0 openstep-parser==1.5.4 svgutils==0.3.4 # For semgrep & mitmproxy ruamel.yaml==0.16.13 # pyup: ignore click==8.0.1 # pyup: ignore decorator==4.4.2 # pyup: ignore
原因分析
- pip 22.0.2的依赖解析器效率不足:旧版本pip处理大量带宽泛版本约束(如
>=)的依赖时,会采用穷举式兼容性检查逻辑,当多个包的版本范围存在交叉依赖时,会大幅增加计算耗时。 - requirements.txt混合了宽泛约束与固定版本:文件中既有大量
>=形式的宽松版本要求,又存在多个固定版本的包(如IP2Location==8.9.0、androguard==3.4.0a1),这种混合会让解析器需要在海量版本组合中寻找兼容解。 - 包含预发布版本包:
androguard==3.4.0a1属于预发布版本,这类包的依赖处理逻辑更复杂,进一步增加了解析器的计算负担。
解决方法
- 升级pip到最新版本:新版本pip(23.x及以上)优化了依赖解析算法,能显著提升兼容性检查速度,执行命令:
pip install --upgrade pip - 临时使用旧版解析器:如果暂时不想升级pip,可以切换回旧的legacy resolver,虽然可能存在少量兼容性风险,但速度更快:
pip install -r requirements.txt --use-deprecated=legacy-resolver - 替换宽泛版本约束为固定版本:参考MobSF官方发布的稳定依赖版本(如项目仓库中的
requirements.lock文件),将部分>=形式的约束改为具体版本,缩小解析器的搜索范围。 - 改用国内PyPI镜像源:网络延迟会拖慢包版本信息的查询速度,使用国内镜像源可以加速下载和版本检查,示例命令:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple - 使用虚拟环境隔离依赖:避免当前环境中无关包干扰依赖解析,创建并激活虚拟环境后再执行安装:
python -m venv mobsf-env source mobsf-env/bin/activate pip install --upgrade pip pip install -r requirements.txt
内容的提问来源于stack exchange,提问作者up10388
相关产品推荐
相关产品推荐

