首页 > 解决方案 > 如何更新/安装 gcovr 以匹配我更新的编译器 gcc

问题描述

我有 ubuntu 18.04 和 gcc 版本 7。

我使用替代品将 gcc 更新到版本 8,并将我的 gcov 版本从属到 gcc 以保持它们兼容(这在 nicley 中有效),但gcovr它本身被困在 3.4 版,它需要是 ~ 4.x 版

    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 700 \
        --slave /usr/bin/g++ g++ /usr/bin/g++-7                            \
        --slave /usr/bin/gcov gcov /usr/bin/gcov-7
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 800 \
        --slave /usr/bin/g++ g++ /usr/bin/g++-8                            \
        --slave /usr/bin/gcov gcov /usr/bin/gcov-8

我进行了一些研究,我认为 gcovr 我只是一个 python 脚本。我安装了 python 2.7,也安装了 python .36。

我尝试使用 pip 安装 gcovr:

sudo -H pip install gcovr
Requirement already satisfied: gcovr in /usr/lib/python2.7/dist-packages

这个网站显示了我需要的版本:这里

以下是相关表格:

Python  gcovr
2.6     3.4
3.4     4.1

所以我知道我想要什么以及我需要去哪里,但我不知道如何去那里。我认为我的 pip install 命令调用了 python 2.7 pip(我的 python 知识基本上为零),所以我觉得我需要为 python 3.6 调用 pip 以获得我想要的 gcovr 版本(可能在这里很远)。知道我有各种版本的 python,看起来我的默认版本是 2.7:python --version: 2.7

有什么线索可以让我更新 gcovr(甚至我的 python 版本默认为 3.x)?

更新 1

我得到了一点点。我安装了 python 替代品:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2

现在我可以在 python 2.x 和 3.x 之间切换。当我将 python 设置为 3.x 并尝试安装 gcovr 时,我得到:

sudo -H pip install gcovr
Collecting gcovr
  Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)': /simple/gcovr/
  Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)': /simple/gcovr/
  Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)': /simple/gcovr/
  Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)': /simple/gcovr/
  Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)': /simple/gcovr/
  Could not find a version that satisfies the requirement gcovr (from versions: )
No matching distribution found for gcovr

我想我可以下载更新版本的 gcovr 脚本...

标签: pythonlinuxubuntugccgcovr

解决方案


Gcovr 独立于 GCC 版本,但 GCC 8 确实稍微改变了覆盖格式。这些更改首先在 gcovr 4.0 中实现,但在 gcovr 4.2 中添加了进一步的改进。如果您使用的编译器不是命名gccg++路径中的编译器,您应该告诉 gcovr 它需要使用哪个 gcov 版本(例如gcovr --gcov-executable gcov-7 ...)。

这种情况下的问题是,python通常pip指的是 Python 2.7 版本,而不是 Python 3 版本。Python 3.x 变体可用作python3pip3。因此,正确的调用将是:

$ sudo pip3 install gcovr

(如果安装到您的主目录中,也应该在没有 sudo 的情况下工作。)

如果要为特定 python 安装 gcovr,可以调用 pip,如下所示python -m pip ...

$ sudo /path/to/your/python3 -m pip install gcovr

如果要升级现有的已安装 Python 包,则必须明确告诉 pip 这样做:

$ pip install -U gcovr

但是,您不能使用 pip 来更新通过 apt 安装的软件包。相反,首先删除 apt 包,例如使用sudo apt-get remove gcovr.

要安装特定的 gcovr 版本,请使用类似的需求规范gcovr == 4.2(但请记住使用引号):

$ pip3 install 'gcovr == 4.2'

您不应该使用镜像,除非您的本地网络情况需要这样做,例如,如果您没有互联网连接。如果您受到 TLS 拦截(本质上是破坏普通证书验证的中间人攻击),您可能希望用pip --cert /path/to/ca .... 但是,如果您不想从 PyPI 安装,您也可以从 Github 安装,例如pip install git+https://github.com/gcovr/gcovr.git用于开发版本或pip install https://github.com/gcovr/gcovr/archive/4.2.tar.gz特定版本。

升级 gcovr 时,还请阅读更改日志,因为在某些极端情况下,某些更改会破坏兼容性,例如围绕参数处理或用于查找源外构建的启发式方法。在某些情况下,这可能会改变覆盖率指标。

另请注意,Python 2 已停产,不再受支持。下一个 gcovr 版本(预计为 4.3)将不再支持 Python 2.x 和 3.5。即使 Python 2.7 已经死了,你也不应该改用pythonPython 3——这会破坏你系统上的许多程序,可能包括重要的操作系统组件。相反,python3如果您想要 Python 3,请始终显式使用。


推荐阅读