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.7
和python3.5
两个版本,对应的pip也有pip2
和pip3
两个版本,但两个版本更新都会出现这个问题。这种情况下,可以有两种方式解决:
-
官网手动下载离线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
- 下载