You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python 2.7环境下旧脚本依赖包冲突问题求助

解决Python 2.7旧脚本依赖冲突的实操方向

首先得说,Python 2.7已经停止维护多年,旧包之间的兼容性确实是个老大难,但针对你的场景,我们可以从几个角度来逐个击破:

1. 用conda环境文件固化依赖,让conda自动解决冲突

手动逐个安装很容易踩版本冲突的坑,最好把所有需要的包、对应Python 2.7兼容的精确版本,以及合适的channel都写在environment.yml里,让conda一次性处理依赖。

比如针对你的需求,我整理了一个适配的yml模板:

name: py27-legacy-script
channels:
  - conda-forge  # 优先用conda-forge,旧版本包更全
  - defaults
dependencies:
  - python=2.7.18  # Python 2.7的最终稳定版
  - pip=20.3.4  # 支持Python 2.7的最后一个pip版本
  # 先装geopandas的底层依赖,指定兼容Python2的版本
  - gdal=2.4.4
  - shapely=1.6.4
  - fiona=1.8.13
  - pyproj=1.9.6
  - rasterio=1.1.5
  - rtree=0.9.4
  # 其他conda可安装的依赖
  - pandas=0.24.2  # pandas 1.0+不再支持Python2
  - sqlalchemy=1.3.24  # sqlalchemy 1.4+放弃Python2
  - pyyaml=5.4.1
  - scikit-image=0.16.2
  - beautifultable=0.7.0
  - tqdm=4.64.1
  # pip安装的包(conda没有合适版本的)
  - pip:
    - psycopg2-binary==2.7.7  # 2.8+不支持Python2
    - osmnx==0.9  # 你指定的版本

然后执行命令创建环境:

conda env create -f environment.yml

如果conda还是报错,可以尝试加上--override-channels参数强制使用指定的channel。

2. 针对性解决six包的冲突问题

你提到安装geopandas时遇到six版本冲突,这是因为Python 2和3对six的版本要求有差异,解决方法很直接:

  • 在安装命令里直接锁定six的兼容版本:
conda install -c conda-forge geopandas=0.7.0 python=2.7 six=1.16.0
  • 或者把six=1.16.0添加到上面的environment.yml的dependencies里,让conda自动协调。

3. 分平台处理特殊依赖

Linux环境

Linux下geopandas的依赖相对好处理,优先通过conda-forge安装底层库(GDAL、Shapely等),再装geopandas:

conda install -c conda-forge gdal=2.4.4 shapely=1.6.4 fiona=1.8.13 python=2.7
conda install -c conda-forge geopandas=0.7.0

Windows环境

Windows下要严格按照你提到的指定版本安装,先逐个装底层依赖,再装上层包:

conda install -c conda-forge pyproj=1.9.6 gdal=2.4.4 shapely=1.6.4 fiona=1.8.13 rasterio=1.1.5 rtree=0.9.4 python=2.7
conda install -c conda-forge geopandas=0.7.0
pip install osmnx==0.9 psycopg2-binary==2.7.7

4. 避免conda和pip混用的坑

如果必须混用conda和pip,一定要遵循这个顺序:

  1. 先用conda安装所有能通过conda安装的包
  2. 升级pip到支持Python2的最高版本(20.3.4)
  3. 再用pip安装conda无法提供的包
    这样能最大程度减少版本冲突的概率。

最后提个建议

虽然以上方法能暂时解决问题,但Python 2.7已经完全没有安全更新了,长期来看最好还是把脚本迁移到Python 3,比如用2to3工具做初步转换,再手动调整geopandas、osmnx等包的新版本适配问题。

内容的提问来源于stack exchange,提问作者Hugh_Kelley

火山引擎 最新活动