解决ubuntu16.04在线安装gdal和numpy等库失败问题

0. 背景

从github上clone了一个c++&python开源项目,项目也有些历史了,所以当时工程匹配的系统是Ubuntu16.04,为保证工程顺利运行,因此基于基础的Ubuntu16.04基础镜像上进行运行环境配置,但配置过程中遇到了一些问题,主要还是因为版本导致的。

1. 准备

Ubuntu16.04官方基础镜像中很多东西都没有,需要手动安装。在这里,我需要通过apt命令安装以下工具/库

  • GDAL >= 2.2,这是一个c/c++开发库
  • python-dev,python-pip,Python相关工具
  • 其他基础工具包,包括gcc等

为了安装更快,我将apt的镜像源改为了清华源,不过在改成清华源前,需要先安装下apt-transport-https 工具,否则无法安装https源的文件。

apt install -y apt-transport-https 

注意,换镜像源后,这里会有个坑,待会会提到。

2. c/c++开发库GDAL安装问题描述

在安装GDAL时,用以下命令直接安装:

apt install -y gdal-bin libgdal-dev

安装后的版本是1.x版本

apt list --installed  | grep gdal

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

gdal-bin/xenial,now 1.11.3+dfsg-3build2 amd64 [installed]
libgdal-dev/xenial,now 1.11.3+dfsg-3build2 amd64 [installed]
libgdal1i/xenial,now 1.11.3+dfsg-3build2 amd64 [installed,automatic]

导致在编译源码时出现符号不对应的情况

/home/work/cProject/fmm/src/io/gps_reader.hpp:95:3: error: 'GDALDataset' does not name a type
   GDALDataset *poDS;   // GDAL 2.1.0
   ^
/home/work/cProject/fmm/src/io/gps_reader.cpp: In constructor 'FMM::IO::GDALTrajectoryReader::GDALTrajectoryReader(const string&, const string&, const string&)':
/home/work/cProject/fmm/src/io/gps_reader.cpp:47:3: error: 'poDS' was not declared in this scope
   poDS = (GDALDataset *) GDALOpenEx(filename.c_str(),
...

为了能耐直接使用apt在线安装,避免手动编译,需要通过add-apt-repository工具添加gdal的源,该工具需要通过下列命令安装

apt install software-properties-common

安装完成后,添加源:

add-apt-repository -y ppa:ubuntugis/ppa && apt-get -q update && apt install -y gdal-bin libgdal-dev

但是会报错:

 Official stable UbuntuGIS packages.
 More info: https://launchpad.net/~ubuntugis/+archive/ubuntu/ppa
Press [ENTER] to continue or ctrl-c to cancel adding it
Cannot add PPA: 'ppa:~ubuntugis/ubuntu/ppa'.
ERROR: '~ubuntugis' user or team does not exist.

搜了一下资料,尝试了几种方法,发现都解决不了这个问题。最后尝试将apt源由清华源改回官方源apt update,再执行上面添加gdal源的操作,添加成功会显示下面的信息,成功安装gdal 2.x版本,

gpg: keyring `/tmp/tmp2z1nkena/secring.gpg' created
gpg: keyring `/tmp/tmp2z1nkena/pubring.gpg' created
gpg: requesting key 314DF160 from hkp server keyserver.ubuntu.com
gpg: /tmp/tmp2z1nkena/trustdb.gpg: trustdb created
gpg: key 314DF160: public key "Launchpad ubuntugis-stable" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
OK

3. python包安装numpy问题描述

常规地,使用pip install命令在线安装对应的包:

pip install numpy flask tornado==5.1

但是显示以下错误和警告:

Collecting numpy
  Downloading https://files.pythonhosted.org/packages/a0/41/8f53eff8e969dd8576ddfb45e7ed315407d27c7518ae49418be8ed532b07/numpy-1.25.2.tar.gz (10.8MB)
    100% |################################| 10.8MB 137kB/s 
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-6hmlIj/numpy/setup.py", line 47
        raise RuntimeError(f'Cannot parse version {FULLVERSION}')
                                                               ^
    SyntaxError: invalid syntax
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-6hmlIj/numpy/
You are using pip version 8.1.1, however version 23.2.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

根据提示,应该是pip版本的问题,但执行pip install --upgrade pip或者python -m pip install --upgrade --force pip,都会显示以下错误:

Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-2w15fd/pip/

Ubuntu中安装有python2.7python3.5两个版本,对应的pip也有pip2pip3两个版本,但两个版本更新都会出现这个问题。这种情况下,可以有两种方式解决:

  • 官网手动下载离线pip安装包更新版本,

  • 按照下面的方式在线更新

    • 下载get-pip.py脚本: wget https://bootstrap.pypa.io/pip/3.5/get-pip.py
    • 再分别用python2和python3依次运行该脚本,即可将pip版本更新
    python2 get-pip.py
    # 或
    python3	get-pip.py
    

    更新后,我这里更新到了20.3.4版本:

    pip -V && pip3 -V
    pip 20.3.4 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
    pip 20.3.4 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)
    

    不过这样安装后,pip2和pip3默认安装到了/usr/local/bin路径下,我这边不知道为什么,即使环境变量PATH中已经有了/usr/local/bin这个路径,还是无法直接在终端中运行pip命令:

    echo ${PATH}
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    
    pip -V
    bash: /usr/bin/pip: No such file or directory
    

    创建两个软连接到/usr/bin下即可

    ln -s /usr/local/bin/pip2 /usr/bin/pip && ln -s /usr/local/bin/pip3 /usr/bin/pip3
    

    之后即能正常安装相关的Python包了

    pip install numpy flask tornado==5.1
    
    Installing collected packages: click, MarkupSafe, Jinja2, Werkzeug, itsdangerous, flask, futures, six, singledispatch, backports-abc, tornado
    Successfully installed Jinja2-2.11.3 MarkupSafe-1.1.1 Werkzeug-1.0.1 backports-abc-0.5 click-7.1.2 flask-1.1.4 futures-3.4.0 itsdangerous-1.1.0 singledispatch-3.7.0 six-1.16.0 tornado-5.1
    
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值