基于environment.yml创建conda环境耗时1.5小时,如何优化与调试?
优化conda环境创建速度的实用方案
针对你提供的environment.yml文件,以下是具体的调试和优化方法:
一、先排查慢的原因
- 启用详细日志:执行
conda env create -f environment.yml -v,查看日志定位卡顿环节——是conda依赖解析慢,还是pip包下载/安装慢。 - 测试网络连通性:分别测试conda仓库和PyPI的访问速度,比如用
conda search pandas --channel conda-forge验证conda源速度,用pip install --dry-run azure-core测试PyPI速度。
二、具体优化措施
1. 调整conda通道配置,减少依赖冲突解析时间
当前你的通道顺序是defaults在前,conda-forge在后,建议将conda-forge设为最高优先级并开启严格模式,避免跨通道依赖混装,大幅缩短依赖搜索时间。修改后的channels部分如下:
channels: - conda-forge - defaults channel_priority: strict
2. 放宽conda包的版本约束
过严的版本号会让conda花费大量时间匹配兼容版本,适当放宽约束:
- 将
pandas=1.5改为pandas>=1.5,<2(限制大版本避免兼容性问题) - 将
pyarrow=11.0.0改为pyarrow>=11 - 将
pip=23.0改为pip>=23.0 - 将
setuptools=65.0改为setuptools>=65.0
3. 迁移部分pip包到conda安装
你的pip依赖中多数Azure相关包在conda-forge已有预编译版本,用conda安装比pip更快且避免依赖冲突。修改后的dependencies示例:
dependencies: - python=3.10 - pandas>=1.5,<2 - pip>=23.0 - pyarrow>=11 - pyspark=3.3.1 # pyspark版本需严格匹配集群环境,保留精确版本 - setuptools>=65.0 # 从pip迁移到conda的Azure包 - conda-forge::azure-core>=1.26 - conda-forge::azure-identity>=1.7 - conda-forge::azure-storage-blob>=12.16 - conda-forge::azure-mgmt-resource>=21.2 - conda-forge::azure-mgmt-storage>=20.1 - pip: # 仅保留conda仓库没有的包 - pyarrowfs-adlgen2==0.2.4 - check-wheel-contents==0.4.0 - wheel-filename==1.4.1
4. 用mamba替代conda执行环境创建
mamba是conda的C++重写版本,依赖解析速度比原生conda快5-10倍,安装后直接用以下命令创建环境:
# 先安装mamba(仅需一次) conda install -n base -c conda-forge mamba # 创建环境 mamba env create -f environment.yml
5. 配置国内镜像源(针对网络慢的情况)
如果是网络下载慢,将conda和pip的源换成国内镜像(如清华镜像):
- 修改
~/.condarc文件(Linux/macOS)或C:\Users\<你的用户名>\.condarc(Windows):
channels: - conda-forge - defaults show_channel_urls: true default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
- 修改pip源:在
~/.pip/pip.conf(Linux/macOS)或C:\Users\<你的用户名>\pip\pip.ini(Windows)添加:
[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple
6. 预打包复用环境(可选)
如果需要多次创建相同环境,可将已创建好的环境打包,下次直接解压使用:
# 打包环境 conda pack -n test_syn_spark_3_3_1 -o env.tar.gz # 解压复用(需先创建空环境) conda create -n new_env --clone test_syn_spark_3_3_1 # 或者直接解压到conda环境目录 tar -xzf env.tar.gz -C ~/miniconda3/envs/new_env
内容的提问来源于stack exchange,提问作者Aravind Yarram
相关产品推荐
相关产品推荐

